【问题标题】:Environment variables are not available with systemd环境变量在 systemd 中不可用
【发布时间】:2016-09-24 00:18:20
【问题描述】:

我正在部署一个在虚拟环境中运行的烧瓶应用程序

我的systemd文件如下:

[Unit]
Description=Gunicorn instance to serve my-page
After=network.target

[Service]
User=jb
Group=www-data
WorkingDirectory=/home/jb/webjosue/my-page
Environment="PATH=/home/jb/webjosue/FlaskENV/bin"
ExecStart=/home/jb/webjosue/FlaskENV/bin/gunicorn --workers 3 --bind unix:my-page.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

在我的 main.py 我有

settings = os.environ['APP_SETTINGS']

我得到这个错误

raise KeyError(key)
Sep 24 00:10:13 ubuntu-512mb-nyc3-01 gunicorn[23439]: KeyError: 'settings'

我猜是因为我的环境指向 virtualenv (FlaskENV),所以我的 .profile 中的其他环境变量没有被识别。

有什么想法吗?

【问题讨论】:

  • 不,我正在读取环境变量,然后将其分配给设置,因为我将在其他地方使用此变量。但是永远找不到环境变量 APP_SETTINGS。但是,我可以在本地运行它。
  • 我的第一个猜测是 gunicorn 以不同的用户身份运行,因此您的会话环境变量不可用。
  • 你可以把环境变量放在systemd服务文件中。

标签: python ubuntu virtualenv gunicorn


【解决方案1】:

正如@Joe Doherty 所说的here,您可以在Service 部分使用Environment 指令添加环境变量,更多information。例如:

[Service]
Environment="PATH=/xx/yy/zz/venv/bin"
Environment="FLASK_ENV=development"
Environment="APP_SETTINGS=config.DevelopmentConfig"

我使用的是 virtualenv,所以/xx/yy/zz/venv/bin 是 virtualenv 文件夹的路径。

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2017-08-26
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多