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)和而已,没有其他功能上的限制,相比它带来的便利,这点小限制还是可以接受的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。