ustawić zmienną środowiskową w supervisord:Python Key Błąd przy ustawianiu zmiennej środowiskowej w supervisord
[program:worker]
directory = /srv/app/
command=celery -A tasks worker -Q default -l info -n default_worker.%%h
environment=BROKER="amqp://admin:[email protected]:5672//"
ciągu mojego celeryconfig.py I spróbuj czytać tej zmiennej takiego.
BROKER = os.environ['BROKER']
Ale nadal otrzymuję klucz poniżej, dlaczego?
File "/usr/local/lib/python2.7/dist-packages/celery/loaders/base.py", line 106, in import_module
return importlib.import_module(module, package=package)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/srv/app/celeryconfig.py", line 6, in <module>
BROKER = os.environ['BROKER']
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'BROKER
Jest wysypisko plik z envs jak zasugerowano w komentarzach:
{
'SUPERVISOR_GROUP_NAME': 'celery_default_worker',
'TERM': 'linux',
'SUPERVISOR_SERVER_URL': 'unix: ///var/run/supervisor.sock',
'UPSTART_INSTANCE': '',
'RUNLEVEL': '2',
'UPSTART_EVENTS': 'runlevel',
'PREVLEVEL': 'N',
'SUPERVISOR_PROCESS_NAME': 'celery_default_worker',
'UPSTART_JOB': 'rc',
'PWD': '/',
'SUPERVISOR_ENABLED': '1',
'runlevel': '2',
'PATH': '/usr/local/sbin: /usr/local/bin: /sbin: /bin: /usr/sbin: /usr/bin',
'previous': 'N'
}
Dziwne - to wygląda poprawnie w pierwszym przejściu. Być może pomoże to w debugowaniu dodać 'with open ("/tmp/selery-environment.txt "," w ") jako f: f.write (repr (os.environ))' do twojego 'celeryconfig.py', następnie sprawdzając plik '/ tmp/seler-environment.txt', aby zobaczyć, co * oznacza * w twoim środowisku? –
Potwierdź kolejność wykonywania. tj. sprawdź, czy zmienna środowiskowa BROKER jest ustawiona jako pierwsza w 'supervisord:' lub BROKER jest odczytywana jako pierwsza w 'CeleryConfig.py'. Jeśli najpierw przeczyta się 'CeleryConfig.py', to BROKER nie istnieje, ponieważ BROKER jest ustawiony w' supervisord: ' – Vinkal
Czy powiedziałeś' supervisordowi ', aby podniósł zmiany, lub w inny sposób ponownie uruchomił 'supervisord'? –