【发布时间】:2018-06-11 04:56:41
【问题描述】:
我在 RDS 上使用 Postgres 创建了一个新的 EC2 实例。我确认我可以使用 psql 从 EC2 实例连接到数据库而没有任何问题,这意味着我的安全设置很好。
但是,当我尝试运行 manage.py runserver 或 manage.py dbshell(来自 virtualenv)时,Django 挂起,然后最终给出超时错误:
psql: could not connect to server: Connection timed out 是服务器 在主机“whatever.rds.amazonaws.com”上运行 (172.xxx.xxx.xxx) 并接受端口 5342 上的 TCP/IP 连接?
Traceback(最近一次调用最后一次):文件“manage.py”,第 22 行,在 execute_from_command_line(sys.argv) 文件“/home/ubuntu/Env/xxxx/lib/python3.5/site-packages/django/core/management/init.py”, 第 363 行,在 execute_from_command_line 实用程序.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, **options)
文件“/home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/core/management/commands/dbshell.py”, 第 22 行,在句柄中 连接.client.runshell()
文件“/home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/db/backends/postgresql/client.py”, 第 66 行,在 runshell 中 DatabaseClient.runshell_db(self.connection.get_connection_params())
文件“/home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/db/backends/postgresql/client.py”, 第 58 行,在 runshell_db subprocess.check_call(args)
文件“/usr/lib/python3.5/subprocess.py”,第 581 行,在 check_call 中 raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['psql', '-U', 'db_name', '-h'、'whatever.rds.amazonaws.com'、'-p'、'5342'、'user_name']' 返回非零退出状态 2
我尝试创建 Django 应用程序的新副本以查看是否可能涉及损坏的文件,并尝试对我的 settings.py 文件进行一些更改,但没有运气。
有什么想法吗?
编辑:
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',
}
}
【问题讨论】:
-
从 EC2 CLI 执行
psql -U db_name -h something.rds.amazonaws.com -p 5432 user name连接没有问题吗? -
@DmitryPolonskiy - 是的,我可以使用 EC2 CLI 中的 psql 命令毫无问题地连接。我彻底糊涂了!
-
您的
manage.py文件中有类似os.environ.setdefault("DJANGO_SETTINGS", "settings")的内容吗?你也试过把主机改成localhost -
@DmitryPolonskiy 该应用程序在我的开发机器上的本地主机上运行良好,是的,我确实在 manage.py 中有环境设置。我正忙着在 EC2 实例上设置 postgres,看看我是否可以这样连接。
-
@Paolo 我将 AWS 用于不同的 postgres 系统,我们通过更改安全组进行了类似的操作,直到一切顺利。我们没有发现任何安全问题,但我不会声称自己是专家。
标签: python django postgresql amazon-ec2