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

问题描述 投票:0回答:2

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

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

但是这在开发方面有效。

[UPDATE 2020年5月1日:我使用systemd并在gunicorn.service文件中传递了像这样的变量。它将仍然无法工作并得到关键错误,)将发布确切的错误),因为它是在Ubuntu上生产的,但是我正在Windows上开发,并且可以在Environment上正常工作开发中的变量。是os.environ['var_name']正确的访问方式?我也尝试了os.environ.get('var_name'),就像我在某些视频中看到的,可以让.get()访问该值。我会再试一次,也许我犯了一些错误。请随时要求任何信息。Service File

回答-这是我的错误。

django ubuntu nginx gunicorn production-environment
2个回答
1
投票

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

之后,您可以在systemd配置文件的[Service]部分下,按照以下步骤在systemd配置文件中设置环境变量:

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

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


0
投票

环境变量将在一行中设置,其中spaces分隔每个键值对。 (不像所选答案中提到的那样)无法与主管合作。

所以正确的方法如本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。检查所有链接的选定答案。

这不起作用:Answer Screenshot

© www.soinside.com 2019 - 2024. All rights reserved.