django-admin.py 和在 Dotcloud 上正确更改 PYTHONPATH 的方法?
我没有一个 manage.py
文件,而是使用不同的设置来切换开发和生产环境,分别通过 DJANGO_SETTINGS_MODULE
和 django-admin.py
。这是 Django 文档和 pydanny 在《2 Scoops of Django》一书中推荐的做法。
我的项目放在 /home/dotcloud/current/bipolar
这个路径下。我的设置文件在 /home/dotcloud/current/bipolar/bipolar/settings/dotcloud.py
,这是按照 Django 1.5 的目录结构来的。DJANGO_SETTINGS_MODULE
在 dotcloud.yml
文件中设置为 bipolar.settings.dotcloud
。
我在使用 Dotcloud 时遇到了一些麻烦。当我只是跟着示例教程走的时候,我已经需要在 postinstall
脚本中添加一行 export PYTHONPATH=/home/dotcloud/current/(hellodjango|bipolar):$PYTHONPATH
。
当我用 supervisor 启动 celery 的时候,事情变得更加复杂。我试着运行命令 django-admin.py celery worker
。但是无论我怎么设置 PYTHONPATH
为 /home/dotcloud/current/bipolar
,它都没有被识别。我尝试了以下两种方法:
command = "PYTHONPATH=/home/dotcloud/current/bipolar:$PYTHONPATH django-admin.py celery worker --loglevel=INFO -E"
还有
environment=PYTHONPATH="/home/dotcloud/current/bipolar"
在 supervisord.conf 文件中都没有效果。我还尝试把这些内容放到一个 shell 脚本中,在运行之前设置路径……这在 postinstall
时是有效的!而且在 shell 中运行时也能正常工作,但在机器部署后就不行了。
所以,任何帮助都非常欢迎!
补充:我尝试了很多方法。我重新添加了一个 manage.py 文件,它同时设置了正确的 sys.path
和 DJANGO_SETTINGS_MODULE
,但还是没有效果。最后,我添加了一个 python-worker
服务,但除了失败的次数增加了两倍外,没有任何成效(supervisord.conf 在两个服务中都被读取,对吧?)。
2 个回答
我知道这样做可能不行,但你试过这个吗:
command = "cd /home/dotcloud/current/bipolar && django-admin.py celery worker --loglevel=INFO -E"
结果发现文档写错了。在supervisord.conf
文件里,不能把directory = $HOME/current/
这样写。你需要把它改成/home/dotcloud/current/
,这样就没问题了。
我还是没法让django-admin.py
正常工作;我猜它是用虚拟环境外的Python来调用的。我觉得manage.py
有点不太好用;有没有更好的方法呢?
这是我能用的supervisord.conf
:
[program:celery_beat]
directory = /home/dotcloud/current/bipolar/
stderr_logfile = /var/log/supervisor/%(program_name)s_error.log
stdout_logfile = /var/log/supervisor/%(program_name)s.log
command = /home/dotcloud/env/bin/python manage.py celery beat --loglevel=INFO
[program:celery_worker]
directory = /home/dotcloud/current/bipolar/
stderr_logfile = /var/log/supervisor/%(program_name)s_error.log
stdout_logfile = /var/log/supervisor/%(program_name)s.log
command = /home/dotcloud/env/bin/python manage.py celery worker -E --loglevel=INFO