【问题标题】:django-admin.py and proper way to alter PYTHONPATH on Dotcloud?django-admin.py 和在 Dotcloud 上更改 PYTHONPATH 的正确方法?
【发布时间】:2013-03-13 23:36:14
【问题描述】:

我没有manage.py,并使用DJANGO_SETTINGS_MODULEdjango-admin.py 的不同设置在开发和生产环境之间切换。这是 Django docs 和 pydanny 在“2 Scoops of Django”中的建议。

我的项目位于/home/dotcloud/current/bipolar。我的设置在/home/dotcloud/current/bipolar/bipolar/settings/dotcloud.py 中,遵循 Django 1.5 目录结构。 DJANGO_SETTINGS_MODuLEdotcloud.yml 中设置为bipolar.settings.dotcloud

我在运行 Dotcloud 时遇到了问题。当我只是按照示例教程进行操作时,我已经必须将 export PYTHONPATH=/home/dotcloud/current/(hellodjango|bipolar):$PYTHONPATH 添加到 postinstall 脚本中。

当使用主管启动 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.pathDJANGO_SETTINGS_MODULE,但无济于事。最后,我添加了一个 python-worker 服务,除了失败两倍之外,它什么也没做(supervisord.conf 在这两个服务上都被读取,对吧?)。

【问题讨论】:

    标签: python django pythonpath dotcloud


    【解决方案1】:

    我知道这可能行不通,但你试过了吗:

    command = "cd /home/dotcloud/current/bipolar && django-admin.py celery worker --loglevel=INFO -E"
    

    【讨论】:

    • 不,我没有。我没有在supervisord.conf 中提到我还设置了directory = $HOME/current/bipolar/。但我现在试了一下,它给了我:2013-03-14 08:03:35,217 INFO spawnerr: can't find command 'cd /home/dotcloud/current/bipolar && django-admin.py celery worker --loglevel=INFO -E' 路径是对的;在控制台中再次执行复制粘贴的命令会导致ImportError: Could not import settings 'bipolar.settings.dotcloud'。但是当我进入该目录中的 python shell 时,我可以很好地导入它。
    【解决方案2】:

    原来the docs 是错误的。不能在supervisord.conf 中设置directory = $HOME/current/。将其替换为 /home/dotcloud/current/ 即可。

    我仍然无法让django-admin.py 工作;我假设它是用 virtualenv 之外的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-22
      • 2012-10-10
      • 1970-01-01
      • 2021-05-24
      • 2010-11-12
      • 2021-05-27
      • 2013-02-25
      相关资源
      最近更新 更多