【发布时间】:2015-02-22 14:57:30
【问题描述】:
我设置了一个环境变量,我使用 .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'],它会打印出正确的值。所以我不知道应用文件找不到它。
这是无法找到变量的运行任务(主管任务)
[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(在supervisor下执行时找不到变量:
from kombu import Exchange, Queue
import os
# Celery Settings
BROKER = os.environ['BROKER']
当我重新启动主管时,它给出了关键错误。
【问题讨论】:
-
你得到的错误表明你正在做
os.environ['BROKER_URL'],而不是os.environ['BROKER']。 -
因为你定义的变量叫
BROKER,而不是BROKER_URL? -
对不起,这是 OP 中的错字,我会更新,这不是问题。
-
只是为了检查:你是如何在生产服务器上调用命令的(我想到的两件大事是 A)sudo 经常被配置为删除所有 env 变量,以及 B)在 WSGI 后面运行或者需要通过其他步骤才能将环境放入该空间
-
什么是“应用文件”?您的问题缺少很多信息。发布一些可以重现问题的代码。
标签: python python-2.7 environment-variables celery