【问题标题】:Running Daphne with DotEnv in a systemd service在 systemd 服务中使用 DotEnv 运行 Daphne
【发布时间】:2021-07-01 16:32:14
【问题描述】:

我正在使用一个 .env 文件,其中包含我的 Django 应用程序的配置。我有一个运行 Daphne 的 systemd 服务(类似于下面的内容)

[Unit]
Description=WebSocket Daphne Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/home/django/myproject/src
ExecStart=/home/django/myproject/venv/bin/python /home/django/myproject/venv/bin/daphne -e ssl:8001:privateKey=/etc/letsencrypt/live/myproject.com/privkey.pem:certKey=/etc/letsencrypt/live/myproject.com/fullchain.pem myproject.asgi:application  
Restart=on-failure

[Install]
WantedBy=multi-user.target

此外,我通过类似的机制使用gunicorn,效果很好。但是,Daphne 没有。

当我通过systemctl start daphne.service 运行它时,它告诉我Django 设置配置不正确所以,我尝试在asgi.py 文件中设置dotenv,如下所示:

dotenv.load_dotenv( os.path.join(os.path.dirname(__file__), '.env' ))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.dev')

if os.getenv('DJANGO_SETTINGS_MODULE`):
    os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv('DJANGO_SETTINGS_MODULE')

但这只是给了我同样的错误。任何想法如何解决这一问题?我检查了这个response,但在daphne.service 中设置环境变量似乎很荒谬/多余。

【问题讨论】:

    标签: django systemd daphne


    【解决方案1】:

    问题似乎是您为ExecStart 行指定的路径

    你有:

    ExecStart=/home/django/myproject/venv/bin/python ...
    

    应该是

    ExecStart=/home/django/myproject/venv/bin/daphne ...
    

    https://build.vsupalov.com/django-systemd-crashcourse/

    【讨论】:

    • 感谢您的回复。我会赞成的。但是,我通过重新排序我的 WSGI 配置解决了这个问题。
    猜你喜欢
    • 2018-03-21
    • 2017-04-03
    • 2019-08-18
    • 2020-12-11
    • 2020-12-23
    • 1970-01-01
    • 2018-11-06
    • 2017-03-22
    • 2021-12-29
    相关资源
    最近更新 更多