Как настроить gunicorn для чтения пользовательских настроек с помощью systemd

#django #gunicorn

#django #gunicorn

Вопрос:

Я перенес сервер, который у меня был, на Ubuntu 16.04 и systemd заменил upstart . У меня есть три среды разработки: производственная, промежуточная и разработка. Только последний использует локальную базу данных, два других используют удаленную. Итак, для обработки развертывания и службы мне удалось создать следующий systemd файл службы:

 [Unit]
Description=Gunicorn service for Project
After=network.target

[Service]
User=projuser
WorkingDirectory=/home/projuser/sites/Project/source
ExecStartPre=/usr/bin/env DJANGO_SETTINGS_MODULE=v3.settings_staging
ExecStart=/home/projuser/sites/Project/env/bin/gunicorn --bind 127.0.0.1:8090 --workers 6 --access-logfile ../access.log --error-logfile ../error.log v3.wsgi:application

[Install]
WantedBy=multi-user.target
  

Служба запускается, но, похоже, игнорирует эту строку : ExecStartPre=/usr/bin/env DJANGO_SETTINGS_MODULE=v3.settings_staging . В журналах я вижу следующее:

 django.db.utils.OperationalError: could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
  

В основном потому, что он использует мой settings.py файл по умолчанию, который я использую для разработки.

Как я могу убедиться, что он загружает промежуточный settings.py файл?

Ответ №1:

Ну, передача в качестве аргумента gunicorn также работает:

--env DJANGO_SETTINGS_MODULE=myproject.settings

https://gunicorn-docs.readthedocs.io/en/latest/run.html#gunicorn-django

То, что я хотел, можно было бы достичь, имея следующий файл в /etc/systemd/system :

 [Unit]
Description=Gunicorn service for a Django Project
After=network.target

[Service]
User=a_user
WorkingDirectory=/home/a_user/project/source
Environment="DJANGO_SETTINGS_MODULE=app.settings_staging"
ExecStart=/home/a_user/envs/project_env/bin/gunicorn --bind 127.0.0.1:8090 --workers 6 --access-logfile ../access.log --error-logfile ../error.log v3.wsgi:application

[Install]
WantedBy=multi-user.target
  

Обратите внимание на следующую строку: Environment="DJANGO_SETTINGS_MODULE=app.settings_staging" .

https://www.linux.com/learn/understanding-and-using-systemd