【问题标题】:Celery Supervisor Virtualenv can't find pip packages installed via githubCelery Supervisor Virtualenv 找不到通过 github 安装的 pip 包
【发布时间】:2016-02-11 23:16:30
【问题描述】:

您好,我正在使用带有 celery 的主管,以便在 django Web 应用程序中运行一些任务。 Celery 似乎发现/解决了问题,模型来自直接通过 github 安装的包。

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

如上所述,软件包已安装/克隆到<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 的结构看起来像这样

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

【问题讨论】:

  • 请发布您遇到的确切错误,您的配置等是什么
  • 您是手动安装每个 VCS 软件包还是将它们包含在需求文件中?如果是这样,您可以显示 requirements.txt 文件中的行吗?也许pip freeze 的相关行也会有所帮助。
  • 它们是需求文件的一部分“-e git+h ttps://ndptc-admin@bitbucket.org/ndptc-admin/ndptc-core.git#egg=ndptc”我把http 中有一个空格,所以它不会链接。
  • 您能否粘贴/链接完整的 supervisord.conf 文件和相关的 supervisor.d/*.conf 文件,以及来自您的 virtualenv 内部和 vietualenv 外部的 pip freeze 的输出?这个问题看起来很奇怪,我会先看看这些东西。

标签: python django celery python-3.4 supervisord


【解决方案1】:

您必须在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"

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 感谢您的回复,您回复时我正在编辑问题。你是正确的,主管在主机上,芹菜在 virtualenv 上,但我正在调用安装在 virtualenv 中的 celery。
    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 2014-02-08
    • 2018-05-24
    • 2011-12-16
    • 2013-07-21
    • 2012-09-14
    • 2023-04-03
    相关资源
    最近更新 更多