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

标签 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"

最佳答案

最终,下面是我解决问题的方法。可能会帮助某人。受两勺示例的启发

简要步骤:

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

创建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')

等等..

关于python - 无法访问环境变量远程服务器 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32158420/

相关文章:

python , Selenium : unable to get raw html from javascript

python - 象征性地解决。选择最终表示中的符号

Django session 数据和 Redis 作为后端

Django:访问不同服务器上的数据库: "The fastCGI process exceeded configured activity timeout"

django - docker为Django设置gdal

python - docker postgres 角色不存在

python - Django Shell 图片上传_io.BufferedReader 无属性大小

javascript - 在 Bokeh 应用程序之间传输来自点击事件的数据

python - 从另一个类 Odoo 10 中检索字段的值

python - 如何将我的数据写入 json 文件?