Celery Supervisor Virtualenv 找不到通过 github 安装的 pip 包

Celery Supervisor Virtualenv can't find pip packages installed via github

你好,我正在使用 supervisor 和 celery 来 运行 django 网络应用程序中的一些任务。 Celery 似乎有问题 finding/resolving,来自直接通过 github 安装的包的模型。

http://pip.readthedocs.org/en/stable/reference/pip_install/#vcs-support

如上所述,包 installed/cloned 进入 <virtualenv>/src 目录。我想知道我是否在使用 supervisord.conf 文件(例如 PYTHONPATH)的环境设置中遗漏了一些东西,或者是否有其他东西可以使用这些已安装的软件包。我收到

ValueError: Related model cannot be resolved

这似乎没有意义,因为整个应用程序在这些包上运行良好。

版本

芹菜 - 3.1.18

主管 - 3.0b2

supervisord.conf

[program:celeryd]
command=/home/path/to/virtualenv/celery worker -A moi --loglevel=info
stdout_logfile=/var/log/celery/celeryd.log
stderr_logfile=/var/log/celery/celeryd.error.log
directory=/path/to/app

virtualenv 看起来结构是这样的

virtualenv/
  - bin/
  - lib/
  - share/
  - src/github-installed-egg

错误

File "/home/ubuntu/moi/lib/python3.4/site-packages/django/db/models/fields/related.py", line 1600, in resolve_related_fields
raise ValueError('Related model %r cannot be resolved' % self.rel.to)
ValueError: Related model 'ndptc_core_courses.Course' cannot be resolved

Web 应用程序 运行正在使用 nginx 和 uwsgi,并且运行良好。 uwsgi 配置文件中的 virtualenv 设置使它起作用。模型是按名称声明的外键,而不是模型对象本身。来自通过 pypi 安装的包的模型工作正常,以及它只是安装在导致问题的 src 文件夹中的模型。

described in django docs here

不确定这是否是您的问题,但常见的情况是将您的应用程序安装在 virtualenv 下并直接安装在主机上。

在这种情况下,您需要确保您的 celery 版本 运行 是安装在您的 virtualenv 中的版本,而不是可能安装在主机根环境中的版本。

例如,假设您的 virtualenv 位于 /opt/virtualenvs/foo 并且您的主管程序配置在 /etc/supervisor.d/foo.conf

[program:foo]
command=/opt/virtualenvs/foo/bin/celery -A celery.conf worker
...

您必须在 supervisor 配置中 "activate" virtualenv。为此,请将以下行添加到您的应用配置中:

environment=PATH="/opt/virtualenvs/foo/bin",VIRTUAL_ENV="/opt/virtualenvs/foo",PYTHONPATH="/opt/virtualenvs/foo/lib/python:/opt/virtualenvs/foo/lib/python/site-packages"