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



你好,我正在将supervisor与芹菜一起使用,以便在django web应用程序中运行一些任务。Celery似乎在查找/解决通过github直接安装的包中的模型时遇到了问题。

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

按照该状态,软件包被安装/克隆到<virtualenv>/src目录中。我想知道我是否在supervisord.conf文件的环境设置中缺少了一些东西,比如PYTHONPATH或其他一些可以使用这些安装包的东西。我正在获取

ValueError:无法解析相关模型

这似乎没有意义,因为应用程序作为一个整体可以很好地使用这些包。

版本

芹菜-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/
  - 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文件夹中的模型导致了问题。

在django文档中描述

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

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

举个例子,假设您的virtualenv位于/opt/virtualenvs/foo,而您的supervisor程序配置在/etc/supervisor.d/foo.conf

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

您必须在supervisor配置中"激活"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"

相关内容

  • 没有找到相关文章

最新更新