【问题标题】:environment variables not available to supervisor-run celery workers主管运行的 celery 工人无法使用环境变量
【发布时间】:2015-06-13 20:06:14
【问题描述】:

当 celery 通过主管运行时,我在某些 Celery 任务中读取环境变量时遇到问题

/etc/supervisord.conf ...

...
[program:celery]
...
command = /home/myuser/mydevelopment/git/ers_data_app/env/bin/celery worker -A webapp.celery --loglevel=info
stdout_logfile=/home/webdev/logs/celeryworker.log
stderr_logfile=/home/myuser/logs/celeryworkererr.log
environment=FLASK_CONFIG="testing"

myapp/myfile.py ...

...
print 'the system config is', os.getenv('FLASK_CONFIG')
dburi = app_config.config[os.getenv('FLASK_CONFIG')].DATABASE_URI

celeryworker.log ...

the system config is None

celeryworkererr.log ...

...
File "/home/webdev/mydevelopment/git/ers_data_app/webapp/dbmodels/database.py", line 16, in <module>
    dburi = app_config.config[os.getenv('FLASK_CONFIG')].DATABASE_URI
KeyError: None

由于supervisor 不启动shell,以下是不必要的,但为了完整起见。

/etc/profile.d/my_app.sh

export FLASK_CONFIG='testing'

【问题讨论】:

  • 尝试将os.environ 转储到日志文件中——其中可能有一些线索

标签: python environment-variables celery supervisord


【解决方案1】:

在 supervisord 块下的 .conf 文件中,您可以添加所有环境 key=value 对

[supervisord]
environment=CELERY_BROKER_URL="amqp://guest:guest@127.0.0.1:5672//",FLASK_CONFIG="TESTING"

[program:celeryd]
command=celery worker -A celery --loglevel=info -P gevent -c 1000

如果您不想硬编码变量但想从 os 环境中将其拉入,请在 bash 上执行第 1 步

导出环境变量

>> sudo export CELERY_BROKER_URL="amqp://guest:guest@127.0.0.1:5672//"

重新加载 Bash

>> . ~/.bashrc

检查环境变量是否设置正确

>> env

现在修改 conf 文件以读取 - Note:在您的环境变量前面加上 ENV_

[supervisord]
environment=CELERY_BROKER_URL="%(ENV_CELERY_BROKER_URL)s",FLASK_CONFIG="%(ENV_FLASK_CONFIG)s"

[program:celeryd]
command=celery worker -A celery --loglevel=info -P gevent -c 1000

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 2017-05-05
    • 2012-10-05
    • 2013-06-02
    • 2015-09-11
    • 2011-01-01
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多