簡體   English   中英

Django 1.11無法連接到RDS上的Postgres

[英]Django 1.11 can't connect to Postgres on RDS

我在RDS上使用Postgres創建了一個新的EC2實例。 我確認可以使用psql從EC2實例連接到數據庫,而不會出現任何問題,這意味着我的安全設置很好。

但是,當我嘗試運行manage.py runservermanage.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/dbshel​​l.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM