python - environment variables not available to supervisor-run celery workers -
i have been having trouble reading environment variables in celery tasks when celery run via supervisor
in /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"
in myapp/myfile.py
...
... print 'the system config is', os.getenv('flask_config') dburi = app_config.config[os.getenv('flask_config')].database_uri
in celeryworker.log
...
the system config none
in 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
since supervisor
doesn't start shell, following unnecessary, here completeness..
in /etc/profile.d/my_app.sh
export flask_config='testing'
in .conf file under supervisord block, can add environment key=value pairs such
[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
if dont want hardcode variables want pull in os environment, step 1 on bash
export env var
>> sudo export celery_broker_url="amqp://guest:guest@127.0.0.1:5672//"
reload bash
>> . ~/.bashrc
check if env vars set properly
>> env
now modify conf file read - note: prepend env variables 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
Comments
Post a Comment