【发布时间】:2015-11-16 11:12:30
【问题描述】:
在我的远程服务器上,运行 Ubuntu 14.04,服务器配置:Django、Nginx 和 Gunicorn,我无法访问环境变量,尽管设置在正确的用户下并且服务器已重新启动。
在我的本地机器上,我设置了环境变量,django 可以在启动期间访问并且运行良好。在远程服务器上,虽然环境变量已经就位,django还是报keyerror。
# from two scoops
import os
from django.core.exceptions import ImproperlyConfigured
def get_env_variable(var_name):
"""Get the environment variable or return exception"""
try:
return os.environ[var_name]
except KeyError:
error_msg = "Set the {} environment variable".format(var_name)
raise ImproperlyConfigured(error_msg)
在服务器上,运行 django 实例的用户与设置环境变量的用户相同。
一切都在本地 PC 上运行。在远程机器上,它没有。我已经重新启动了服务器,仍然。
当我在远程服务器的终端中运行export 时,我会得到环境变量列表,包括我自定义设置的内容。
为了确认,我进入python验证。
import os
os.environ['THE_CUSTOM_KEY']
>> returns the Key
如果 Django 是 Python,那么我错过了哪一步,因为 python 看到了环境变量?
编辑:我在用户帐户的~/.profile 文件中设置变量。
我的 ~/.profile 和变量
# top part cut for brevity
export LOG_ECG_DB="name"
export LOG_ECG_EMAIL="email@gmail.com"
export LOG_ECG_EMAIL_PW="password"
export LOG_ECG_PW="password"
export LOG_ECG_SECRET="secret_key"
【问题讨论】:
-
Django不是Python,它是用 Python 编写的Web Framework(请记住这个面试问题):) -
你是如何设置这些变量的?在哪里?
-
我的 is 表达式意味着,Django 是用 Python 编写的。 @AamirAdnan因此如果python看到它,为什么python上的框架没有看到它?
-
@DanielRoseman 将变量添加到用户的
~/.profile文件中。更新了问题以包含该内容。 -
好吧,那个配置文件是否设置了环境变量?如果不是 - 再次 - .profile 无关紧要。这仅与您 ssh 进入系统有关。 init.d 脚本由 root 启动,然后只更改用户。没有登录,没有 bash,没有配置文件或 bashrc 或其他任何东西。