Python Django应用找不到环境变量

Python Django应用找不到环境变量,python,linux,django,bash,amazon-web-services,Python,Linux,Django,Bash,Amazon Web Services,早些时候我发布了一个有点类似的问题,但找不到我想要的答案,所以经过一些研究,我对它进行了一些改进 我已经编写了一个Django应用程序,将与AWS Elastic Beanstalk一起部署,它使用RDS数据库。我的Elastic Beanstalk环境有几个用于访问数据库的环境变量,这些变量在我的settings.py文件中访问,如下所示: 'NAME': os.environ['RDS_DB_NAME'], 这在部署版本的应用程序中运行良好,但它仍在开发中,因此在本地linux环境中访问这

早些时候我发布了一个有点类似的问题,但找不到我想要的答案,所以经过一些研究,我对它进行了一些改进

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

'NAME': os.environ['RDS_DB_NAME'],
这在部署版本的应用程序中运行良好,但它仍在开发中,因此在本地linux环境中访问这些变量非常有用。我编写了一个bash脚本来导出变量,我可以使用“echo$”测试它是否有效,它返回正确的值

然而,当我尝试在本地运行该应用程序时,我得到了一个KeyError(特别是“KeyError:'RDS_DB_NAME')),因此Django应用程序似乎无法获取我之前声明的环境变量


我有点不知所措-欢迎提出任何想法或进一步的问题

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

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

export RDS_DB_NAME='<your_local_db_name>'

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

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

export RDS_DB_NAME='<your_local_db_name>'

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

以下代码片段摘自关于如何在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',
        }
    }

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

以下代码片段摘自关于如何在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',
        }
    }
我建议使用

使用它,您只需创建所需的.env文件变量。它还允许(但不强制)您将整个数据库配置(以及其他类似缓存等)设置为url,如下所示:

DATABASE_URL=psql://urser:un-githubbedpassword@127.0.0.1:8458/database
我建议使用

使用它,您只需创建所需的.env文件变量。它还允许(但不强制)您将整个数据库配置(以及其他类似缓存等)设置为url,如下所示:

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

感谢您的回复,但不幸的是,这似乎没有帮助。我仍然收到相同的密钥错误。是否关闭了所有打开的终端选项卡并在新终端中重新运行服务器?是,很遗憾没有更改。请检查编辑。此外,您还需要检查环境变量中是否存在变量RDS_DB_NAME谢谢您的响应,但不幸的是,这似乎没有帮助。我仍然收到相同的密钥错误。是否关闭了所有打开的终端选项卡并在新终端中重新运行服务器?是,很遗憾没有更改。请检查编辑。您还需要检查环境变量中是否存在变量RDS_DB_NAME这非常有用,谢谢!但是,如果可能的话,我更愿意使用环境变量,因为我计划最终将完成的项目部署到Github,而不希望发布对数据库的访问!这是非常有用的,谢谢!但是,如果可能的话,我更愿意使用环境变量,因为我计划最终将完成的项目部署到Github,而不希望发布对数据库的访问!