无法访问环境变量远程服务器Django

时间:2015-08-22 16:37:30

标签: python django

在我的远程服务器上,运行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"

2 个答案:

答案 0 :(得分:1)

最终,下面是我解决问题的方法。可以帮助别人。灵感来自两个独家新闻的例子

简短步骤:

  • 在〜/ .env
  • 中创建了一个json文件
  • 让settings.py在加载时读取json文件
  • 文件中的密钥用于填写敏感部分

创建了json文件

我将文件放在本地和远程计算机的〜/ .env中,内容为

{
"SECRET_KEY": "my_secret_key",
"DB": "db_name",
"USER": "db_user",
"USER_PW": "db_user_password",

"EMAIL": "email@email.com",
"EMAIL_PW": "password"
}

如果您的应用没有发送任何电子邮件,您可能不需要上面代码段中的最后两行

阅读json

在我的settings.py中(或者您可以放入utils.py文件中,无论如何),我有这个片段:

import json
from os.path import expanduser
from django.core.exceptions import ImproperlyConfigured

# with this, no need to hardcode
# home directory
home_directory = expanduser("~")

with open(home_directory + "/.env") as f:
    secrets = json.loads(f.read())


def get_secret(setting, secrets=secrets):
    """Get the secret variable or return explicit exception."""
    try:
        return secrets[setting]
    except KeyError:
        error_msg = "Set the {0} environment variable".format(setting)
        raise ImproperlyConfigured(error_msg)

填写

SECRET_KEY = get_secret('SECRET_KEY')

一样

依旧......

答案 1 :(得分:-3)

这是一个NGINX“问题”。当NGINX启动时,它会擦除​​除时区之外的所有环境变量。您可以使用NGINX配置文件手动设置环境变量。但当然,数据将在该配置文件中以明文形式显示。

http://nginx.org/en/docs/ngx_core_module.html#env