我已经设置了一个环境变量,我使用.sh
文件在本地执行:
.sh file:
#!/bin/sh
echo "environment variables"
export BROKER="amqp://admin:password@11.11.11.11:4672//"
在虚拟环境的本地内部我现在可以使用以下方法在Python中阅读:
BROKER = os.environ['BROKER']
但是,在我的生产服务器(Ubuntu)上。我运行相同的文件chmod +x name_of_file.sh
和source settings.sh
,可以使用printenv
查看变量,但Python会出现错误 KeyError:' BROKER' 为什么呢?
这只发生在我的生产机器上,尽管我可以使用printenv
看到变量。请注意我的生产机器不使用virtualenv。
如果我在Ubuntu上运行python shell并执行os.environ['BROKER']
,它会打印出正确的值。所以我不知道app文件找不到它。
这是无法找到变量的运行任务(主管任务)
[program:celery]
directory = /srv/app_test/
command=celery -A tasks worker -l info
stdout_logfile = /var/log/celeryd_.log
autostart=true
autorestart=true
startsecs=5
stopwaitsecs = 600
killasgroup=true
priority=998
user=ubuntu
Celery Config(在主管下执行时找不到变量:
from kombu import Exchange, Queue
import os
# Celery Settings
BROKER = os.environ['BROKER']
当我重新启动主管时,它会给出关键错误。
答案 0 :(得分:2)
来自shell的环境变量不在主管任务中可见。
您需要在超级用户配置中使用environment
设置:
[program:celery]
...
environment=BROKER="amqp://admin:password@11.11.11.11:4672//"