Dotcloud 架设 Django 的几个问题
几个月前写过一篇《在Dotcloud上架设Django网站》的文章,有读者将自己遇到的问题留在评论里,也有通过Gtalk联系我进行讨论的同学,在大家的帮助下解决了不少问题,现一并整理在这此。
关于404错误
这里说的是服务器的404错误,Django返回的404错误会有详细的提示,不在讨论范围内。服务器404错误通常——当然也有例外——是Dotcloud设置不当引起的。最常见的是三种情况:
1.目录结构错误
最简单,但可运行的目录结构如下,dmyz是Django项目目录,其他的是配置文件,他们都在dmyz-on-dotcloud之下。
dmyz-on-dotcloud/
├── dmyz
│ ├── __init__.py
│ ├── manage.py
│ ├── settings.py
│ └── urls.py
├── dotcloud.yml
├── requirements.txt
└── wsgi.py
2.wsgi.py文件错误
基本的wsgi.py文件写法如下:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'dmyz.settings' #项目名
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
唯一可能出错的就是项目名了,也就是第2行,这里的’dmyz.settings’应该是Django项目文件夹的名称,比如你的Django项目名为abc,那这里就设置成’abc.settings’。
3.文件错误
这倒是很偶然碰到的,某同学(因为觉得这事太丢人了所以当事人强烈要求隐藏真实姓名)出现了404错误一直找不到问题所在,后来才发现是settings文件某行少了一个逗号,因为它在本机运行和在Dotcloud运行会调用不同的settings文件,所以没发现这个错误。这也说明,如果settings文件错误同样会引发404错误。不过只要能在本机先检查一次,这个问题完全是可以避免的。
静态文件和数据库文件问题
在不进行特别的settings文件设置的情况下,静态文件夹和数据库文件要和Django项目文件夹放在同一级目录下:
dmyz-on-dotcloud/
├── dmyz
│ ├── __init__.py
│ ├── manage.py
│ ├── settings.py
│ └── urls.py
├── dev.db #sqlite数据库文件
├── dotcloud.yml
├── requirements.txt
├── static #静态文件夹
│ ├── css
│ ├── images
│ └── js
└── wsgi.py
如果一定要把dev.db文件放到Django项目目录下,也可以修改settings文件。
#当dev.db文件在Django项目目录下
import os
PROJECT_PATH = os.path.dirname(__file__)
PROJECT_NAME = os.path.basename(PROJECT_PATH)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(PROJECT_PATH,'dev.db'),
……
}
}
当修改数据库文件,不能使用 dotcloud push dev.db 来更新,否则会报错 error: The application name “dev.db” is invalid. 。dotcloud虽然和git很像但毕竟不是git,只要用它的dotcloud push dmyz 命令就可以把dmyz-on-dotcloud里的内容都上传了。
但无论我怎么修改STATICFILES_DIRS,它都会无视Django项目目录和App目录下的static文件夹,所以没有找到把static文件夹也放到Django项目目录下的方法。
域名设置
首先利用alias命令绑定域名:
$ dotcloud alias add dmyz.www dot.dmyz.org
$ dotcloud url dmyz.www
www: http://54bbccc9.dotcloud.com/
www: http://dot.dmyz.org/
然后解析域名,创建一条CNAME记录到gateway.dotcloud.com就可以了。
但要注意的是,alias命令不能绑定空域名,也就是说不能直接绑定 dmyz.org。我们也不能直接做一个CNAME,将dmyz.org转到www.dmyz.org,这就是很常见的域名www解析问题了,因为很常见,所以有很多解决方案,偷懒的做法是直接把dmyz.org做一个A记录到174.129.25.170,这样当用户访问dmyz.org时,它就会自动跳转到www.dmyz.org。
收费问题
之前Dotcloud打出99$/月的价格,导致大多数人都对它没了兴趣。其实如果你不需要绑定自己的域名,免费版相比专业版,只是没有足够的服务支持(SLA)和而已,没有其他功能上的限制,相比它带来的便利,这点小限制还是可以接受的。
# 来源:动漫驿站
最新招聘
- [北京] 招聘Python高级工程师 - 创业公司
- [武汉] Perl软件工程师(高新急聘) - 赛诺(武汉)技术有限公司
- [武汉] 云存储软件研发工程师(高新急聘) - 赛诺(武汉)技术有限公司
- [北京] Python核心研发 - 北京尚学硕博教育咨询
- [北京] Python 程序开发(Django) - 新浪云计算