如何在任何产品(Nginx 和 Gunicorn)中访问和设置环境变量

How to access and set Environment Variables any production (Nginx and Gunicorn)

我正在尝试为 Ubuntu 上的 Nginx 和 Gunicorn 服务的 Django 项目设置环境变量。 变量是为 Ubuntu 用户设置的,我可以使用 printenv VAR_EMAIL.

查看值

但是当我使用它们的 django 设置时它不起作用,将它们用作 os.environ['VAR_EMAIL'],这不会在生产中获取变量的值并且服务器不起作用。

但是这在开发方面有效。

2020 年 5 月 1 日更新: 我使用了 systemd 并在 gunicorn.service file.This 中传递了这样的变量将无法正常工作仍然会出现关键错误,)将 post 确切的错误)因为它是在 Ubuntu 上生产的但我正在 Windows 上进行开发,它与开发中的环境变量配合得很好。 os.environ['var_name'] 是正确的访问方式吗? 我也尝试了 os.environ.get('var_name') 正如我在一些视频中看到的那样,environ 有 .get() 来访问该值。我会再试一次,也许我做了一些 mistake.Feel 免费询问所需的任何信息。

已回答 - 这是我这边的错误。

你用什么来监督和 运行 Ubuntu 中的 gunicorn 进程?如果你没有使用任何东西,我建议你使用 systemd,在 gunicorn 文档中有一个关于如何设置的小指南:https://docs.gunicorn.org/en/stable/deploy.html#systemd

之后,您可以在 systemd 配置文件中设置环境变量,如下所示,在 systemd 配置文件的 [Service] 部分下:

[Service]
Environment="VAR_EMAIL=var-email"
Environment="ANOTHER_VAR=another-var"

如果您希望将这些变量放在单独的文件中,也可以使用 EnvironmentFile 指令:https://www.freedesktop.org/software/systemd/man/systemd.exec.html#EnvironmentFile=

Now after many problems i faced because of which i just hard coded the variables in code for long time the solution i reached is in this update.Read the complete answer to get it.

这是一个更新,环境变量的传递方式很奇怪。 每个变量都需要以下方法,但您还需要将变量添加到 etc/environment 并在其中添加环境变量。

The environment Variables were to be set in a single line with spaces separating each key+value pair. (Not like mentioned in selected Answer) Couldn't get it to work with supervisor though.

因此,正确的方法是在本 Systemd 文档中提到的:EnvironmentsSystemd

Environment = "KEY_NAME_1=VALUE_KEY_1" "KEY_NAME_2=VALUE_KEY_2" ....

然后用户 PassEnvironment 激活该会话中的那些。 通过这种方式,您可以使用 PassEnvironment 为不同的服务启用不同的环境变量。

PassEnvironment = KEY_NAME_1 KEY_NAME_2 ....

这是由空格分隔的键名。 这应该可以帮助您设置 systemd 。检查所有链接的选定答案。

这行不通: