【问题标题】:Running Migrations with Django to a Remote Database使用 Django 运行迁移到远程数据库
【发布时间】:2017-08-10 07:06:37
【问题描述】:

我正在尝试使用 Django 1.10.5 和 Postgresql 9.5 运行从应用服务器到远程数据库服务器的迁移。这些是单独的 Ubuntu 16.04 EC2 实例。我只在远程数据库服务器上安装了 Postgresql,而不是在应用服务器上。

我在数据库服务器上全局安装了 Postgresql:

sudo apt-get update
sudo apt-get install libpq-dev postgresql postgresql-contrib

我更新了 pg_hba_conf 文件:

host      all      all      10.0.59.0/24      trust

我将我的 postgresql.conf 文件中的监听地址设置为:

listen_addresses = '*'

Django 存在于应用服务器上的 conda 环境中。我将 pip 安装 psycopg2==2.6.2 安装到 conda 环境中。我没有在数据库服务器上安装 psycopg2。

这是我的 Django DATABASE 设置,其中 'host' 是 db 服务器的 IP 地址:

DATABASES: {
    "default": {
        "ENGINE": "django.contrib.gis.db.backends.postgis",
        "NAME": "mysite",
        "USER": "postgres",
        "PASSWORD": "",
        "HOST": "10.0.59.134",
        "PORT": "5432"
    },
}

运行后:

python manage.py migrate

我收到以下错误:

Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
    self.connect()
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/backends/base/base.py", line 171, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/psycopg2/__init__.py", line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: could not connect to server: Connection refused
    Is the server running on host "10.0.59.134" and accepting
    TCP/IP connections on port 5432?


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    execute_from_command_line(sys.argv)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/core/management/__init__.py", line 359, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/core/management/base.py", line 294, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/core/management/base.py", line 345, in execute
    output = self.handle(*args, **options)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 81, in handle
    connection.prepare_database()
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/contrib/gis/db/backends/postgis/base.py", line 24, in prepare_database
    with self.cursor() as cursor:
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/backends/base/base.py", line 231, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/backends/base/base.py", line 204, in _cursor
    self.ensure_connection()
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
    self.connect()
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
    self.connect()
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/backends/base/base.py", line 171, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/home/ubuntu/anaconda3/envs/mysite/lib/python3.6/site-packages/psycopg2/__init__.py", line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
django.db.utils.OperationalError: could not connect to server: Connection refused
    Is the server running on host "10.0.59.134" and accepting
    TCP/IP connections on port 5432?

两个 EC2 实例都位于自定义 VPC 的私有子网中。入站和出站规则的安全组设置被设置为允许任何形式的流量在任何一台机器上往来。

这是私有子网中的一个测试站点,所以目前没有密码或用户(只有我)。

我在这里错过了什么?

【问题讨论】:

  • 呃,不知道,因为你还没有说你正在做什么来得到那个错误。请显示您所做的确切操作以及完整的错误消息。
  • 你好丹尼尔。我很抱歉。我已经相应地更新了这个问题。谢谢。

标签: python django postgresql amazon-ec2 conda


【解决方案1】:

事实证明,在我的 /etc/postgresql/9.5/main/postgresql.conf 文件中,我没有删除 CONNECTIONS AND AUTHENTICATION 下 'listen_addresses' 变量前面的 '#'。

变量需要是:

listen_addreses = '*'

一切正常。我的 Django 应用程序位于运行迁移到另一个 Ubuntu 16.04 EC2 实例上的 Postgresql 数据库的 Ubuntu 16.04 EC2 实例上。两个 EC2 实例都位于私有子网中。

【讨论】:

    猜你喜欢
    • 2018-04-13
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多