Django app无法找到环境变量

时间:2016-05-30 12:49:11

标签: python linux django bash amazon-web-services

我发布的问题与之前的问题有点相似,但找不到我想要的答案,所以经过一些研究后我对它进行了一些改进。

我编写了一个Django应用程序,要与使用RDS数据库的AWS Elastic Beanstalk一起部署。我的Elastic Beanstalk环境有几个用于访问数据库的环境变量,可以在我的settings.py文件中访问,如下所示:

'NAME': os.environ['RDS_DB_NAME'],

这适用于部署版本的应用程序,但它仍在开发中,因此在我的本地Linux环境中访问这些变量非常有用。我编写了一个导出变量的bash脚本,我可以使用“echo $”测试它是否正常工作,它返回正确的值。

然而,当我尝试在本地运行应用程序时,我得到一个KeyError(特别是“KeyError:'RDS_DB_NAME'”),所以看起来好像Django应用程序无法获取我之前声明的环境变量。

我有点难过 - 非常欢迎任何想法或进一步的问题!

3 个答案:

答案 0 :(得分:2)

我建议使用django-environ

有了它,您只需创建所需的.env文件变量即可。此外,它将允许(但不强制)您将整个数据库配置(以及其他类似缓存等)设置为这样的URL:

DATABASE_URL=psql://urser:un-githubbedpassword@127.0.0.1:8458/database

答案 1 :(得分:0)

在ubuntu上转到您的主目录并打开文件.bashrc

在此文件的末尾添加以下行添加:

export RDS_DB_NAME='<your_local_db_name>'

关闭终端并重新打开。运行django服务器并完成。

编辑:

尝试

'NAME': os.environ.get('RDS_DB_NAME', ''),

而不是

'NAME': os.environ['RDS_DB_NAME'],

答案 2 :(得分:0)

另一种处理这种情况的方法是定义何时使用环境变量以及何时使用本地(硬编码)变量的条件。

以下代码段摘自RealPython文章,介绍如何在AWS上部署Django应用程序:

if 'RDS_DB_NAME' in os.environ:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': os.environ['RDS_DB_NAME'],
            'USER': os.environ['RDS_USERNAME'],
            'PASSWORD': os.environ['RDS_PASSWORD'],
            'HOST': os.environ['RDS_HOSTNAME'],
            'PORT': os.environ['RDS_PORT'],
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'name',
            'USER': 'user',
            'PASSWORD': 'pass',
            'HOST': 'localhost',
            'PORT': '5432',
        }
    }