Skip to main content
 首页 » 编程设计

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

2025年05月04日28arxive

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

等等..