你好,我正在将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"