首页 文章

Django 1.11无法连接到RDS上的Postgres

提问于
浏览
1

我在RDS上创建了一个带有Postgres的新EC2实例 . 我确认我可以使用psql从EC2实例连接到数据库,没有任何问题,这意味着我的安全设置很好 .

但是,当我尝试运行 manage.py runservermanage.py dbshell (来自virtualenv)Django挂起然后最终给出超时错误:

psql:无法连接到服务器:连接超时服务器是否在主机“whatever.rds.amazonaws.com”(172.xxx.xxx.xxx)上运行并接受端口5342上的TCP / IP连接?回溯(最近一次调用最后一次):文件“manage.py”,第22行,在execute_from_command_line(sys.argv)文件“/home/ubuntu/Env/xxxx/lib/python3.5/site-packages/django/core/ “管理/ init.py”,第363行,在execute_from_command_line utility.execute()文件“/home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/core/management/init.py”,行355,执行self.fetch_command(子命令).run_from_argv(self.argv)文件“/home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/core/management/base.py”,行283,在run_from_argv self.execute(* args,** cmd_options)文件“/home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/core/management/base.py”,第330行,在执行输出= self.handle(* args,**选项)文件“/home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/core/management/commands/dbshell.py”,行22,在句柄connection.client.runshell()文件“/home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/db/backends/postgresql/client.py”,第66行,在运行中DatabaseC lient.runshell_db(self.connection.get_connection_params())文件“/home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/db/backends/postgresql/client.py”,第58行,in runshell_db subprocess.check_call(args)文件“/usr/lib/python3.5/subprocess.py”,第581行,在check_call中引发CalledProcessError(retcode,cmd)subprocess.CalledProcessError:命令'['psql',' - U' ,'db_name',' - h','whatever.rds.amazonaws.com',' - p','5342','user_name']'返回非零退出状态2

我尝试创建一个Django应用程序的新副本,看看是否有可能涉及到损坏的文件,并且我对我的 settings.py 文件进行了一些更改,但没有运气 .

有任何想法吗?

Edit

Settings.py(重要位)

DEBUG = False

ALLOWED_HOSTS = ['localhost', '0.0.0.0', '127.0.0.1', 'compute.amazonaws.com']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'xxxxxxxx',
        'PASSWORD': 'xxxxxxxx',
        'HOST': 'whatever.us-west-2.rds.amazonaws.com',
        'PORT': '5342',
    }
}

2 回答

  • 0

    我最终在EC2服务器上创建了一个本地postgres数据库,以查看是否出现任何错误 . 当我尝试运行 makemigrationsmigrate 来设置数据库时,我收到了"relation does not exist"错误 . 堆栈跟踪指向我的一个视图中的一行,看起来像这样:

    some_queryset = Model.objects.all()
    some_queryset.delete() # <--- this line was the problem
    

    虽然这在技术上是删除给定表中所有条目的可接受方式,但Django(在服务器上)不喜欢给定模型的关系不存在的事实 .

    我注释掉了这条线,并且能够毫无问题地连接到数据库 .

    因此,对于未来的读者 - 如果您的Django应用程序挂起 runserver ,但您可以从EC2实例访问RDS数据库,请尝试设置本地数据库以检查是否存在任何问题 .

  • 0

    exit status 2 通常意味着您使用错误的参数调用了psql . 对我来说,psql身份验证错误也触发了此退出代码 . 我的问题最终成为 settings.DATABASES['default'] 正在使用的DBPASSWORD环境变量中的拼写错误 .

相关问题