【发布时间】:2015-12-10 23:09:28
【问题描述】:
有没有办法在带有 Ubuntu OS 的 Azure VM(服务管理)上设置系统范围/全局可见的环境变量?我被困在将它们设置在 ubuntu 的 /etc/environment /etc/profile 和 /etc/bash.bashrc 中的情况下,我的应用程序代码没有接收到它们。但是,它们确实出现在 printenv 上。我的猜测是,由于我的网络服务器的设置方式(Gunicorn + Nginx 反向代理),它们以某种方式被绕过了。
但也许有一种方法可以在 Azure VM 上设置优先于一切的环境变量?我知道 Heroku 在他们的仪表板中有这个选项(我一直在使用它),Azure Web Apps 也是如此(由于各种有据可查的兼容性问题,我无法使用它)。
【问题讨论】:
-
在我的带有 Ubuntu 14.04.3 LTS 的 Azure VM 上,我在
/etc/profile中设置了export TEST=abc,并按照gunicorn.org 的安装内容运行通过添加import os修改的代码myapp.py和print os.environ['TEST']在函数app中。当我命令w3m http://localhost:8000访问 url 时,我可以在控制台中获取环境变量。关于您的问题的更多信息可以帮助解决它吗? -
嗨哈桑·拜格。我跟着线程stackoverflow.com/questions/34181555/…再做一次,ubuntu common
/etc/*中的这些环境变量可以通过代码获取。但是,我认为您可以先尝试在同一会话上启动应用程序之前运行命令source /etc/profile /etc/...(这些/etc文件是您想要的)。 -
你的意思是我尝试
sudo service gunicorn stop,然后source这些文件,然后sudo service gunicorn start?或者是其他东西?我什至尝试从门户重新启动我的 Azure VM。我得到的一个线索是,如果我尝试打印默认环境变量USER,打印的值是None,即使我使用 root 或 myuser. -
是的,
source开始之前的那些文件gunicorn。您可以将 cmdsource ...添加到路径/etc/init.d/的服务 bash 脚本gunicorn中。 -
我在
/etc/init.d/中没有 gunicorn bash 脚本,但我有一个 nginx bashscript,我已经在其中添加了export my_variable=value。这不应该奏效吗?还是我错过了什么。
标签: python bash ubuntu azure nginx