[英]Django 1.11 can't connect to Postgres on RDS
我在RDS上使用Postgres創建了一個新的EC2實例。 我確認可以使用psql從EC2實例連接到數據庫,而不會出現任何問題,這意味着我的安全設置很好。
但是,當我嘗試運行manage.py runserver
或manage.py dbshell
(來自virtualenv)時,Django掛起,然后最終出現超時錯誤:
psql:無法連接到服務器:連接超時服務器是否在主機“ whatever.rds.amazonaws.com”(172.xxx.xxx.xxx)上運行並在端口5342上接受TCP / IP連接?
追溯(最近一次通話):在execute_from_command_line(sys.argv)中的文件“ manage.py”,第22行,文件“ /home/ubuntu/Env/xxxx/lib/python3.5/site-packages/django/core/ management / init .py“,行363,在execute_from_command_line utility.execute()中
執行self.fetch_command(subcommand).run_from_argv(self.argv)的文件“ /home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/core/management/ init .py”,第355行
在run_from_argv self.execute(* args,** cmd_options)中的文件283行中的文件“ /home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/core/management/base.py”
執行輸出= self.handle(* args,** options)中的文件“ /home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/core/management/base.py”,第330行
文件“ /home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/core/management/commands/dbshell.py”,第22行,句柄connection.client.runshell()
在運行Shell DatabaseClient.runshell_db(self.connection.get_connection_params()中的文件“ /home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/db/backends/postgresql/client.py”,第66行)
在runshell_db subprocess.check_call(args)的第58行,文件“ /home/ubuntu/Env/ss2017/lib/python3.5/site-packages/django/db/backends/postgresql/client.py”
文件“ /usr/lib/python3.5/subprocess.py”,第581行,在check_call中引發CalledProcessError(retcode,cmd)子進程。CalledProcessError:命令'['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服務器上創建了本地postgres數據庫,以查看是否出現任何錯誤。 當我嘗試運行makemigrations
或進行migrate
以設置數據庫時,出現“不存在關系”錯誤。 堆棧跟蹤指向我的其中一個視圖中的一行,看起來像這樣:
some_queryset = Model.objects.all()
some_queryset.delete() # <--- this line was the problem
即使從技術上講,這是刪除給定表中所有條目的可接受方法,但Django(在服務器上)並不喜歡給定模型的關系不存在的事實。
我注釋掉了這一行,並且能夠毫無問題地連接到數據庫。
因此,對於將來的讀者-如果您的Django應用程序掛在runserver
,但是您可以從EC2實例訪問RDS數據庫,請嘗試設置本地數據庫以檢查是否有任何問題。
exit status 2
通常表示您使用錯誤的參數調用了psql。 對我來說,psql身份驗證錯誤也觸發了此退出代碼。 我的問題最終是settings.DATABASES['default']
.DATABASES settings.DATABASES['default']
使用的DBPASSWORD環境變量中的錯字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.