До того, как я получу ссылки, я знаю, что есть много похожих сообщений, но я прочитал их и использовал их, чтобы добраться до этой точки, но я не думаю, что они отвечают на мой вопрос.
Обзор
Я пытаюсь подключить свой сайт Heroku тестера [EDIT: удален] к моей базе данных PostgreSQL.Ранее я пробовал MS Server, но у меня Windows, и Heroku не понравился pyodbc.
Короткая версия
Я почти уверен, что мой PostgreSQL настроен правильно, но я пытаюсь определить,У меня есть правильное имя хоста для URL-адреса PostgreSQL, и если мне нужно сделать что-то еще с точки зрения разрешения доступа через брандмауэр Windows.
Длинная версия
PostgreSQL
После принятого ответа Как разрешить удаленный доступ к базе данных PostgreSQL my postgresql.conf
имеет listen_addresses = '*'
и порт 5432. Я добавил дополнительную строку
host all all 0.0.0.0/0 md5
на pg_hba.conf
, чтобы получить следующее
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
host all all 0.0.0.0/0 md5
Теперь я могу сделать это в командной строке
C:\etc> psql -U postgres -h 192.XXX.XX.XXX -d ProductionData
Где 192.XXX.XX.XXX
- мой IPv4-адрес (найден при запуске> поменяй настройки Ethernet> MyCompany.local) и все работает.Я знаю, потому что, если я отменю строку на pg_hba.conf
, я получу
(venv) C:\etc> psql -U postgres -h 192.XXX.XX.XXX -d ProductionData
psql: FATAL: no pg_hba.conf entry for host "192.XXX.XX.XXX", user "postgres", database "ProductionData", SSL off
Heroku
Я понимаю, что postgres нужен URL-адрес вида
postgresql://username:password@hostname/database
или
postgresql://username:password@hostname:port/database
Я не совсем понимаю имя хоста, кроме IP-адреса сети.Я пробовал localhost
и тот же IPv4-адрес, что и выше 192.XXX.XX.XXX
и 192.XXX.XX.XXX:5432
.
В разделе «Журналы» ниже приведены настройки netstat, heroku, перезапуски postgresql для каждой из этих попыток, выполняемых в git bash, но я получаю следующее с двумя 192.XXX.XX.XXX
в качестве тайм-аутов.
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
Is the server running on host "192.XXX.XX.XXX" and accepting
TCP/IP connections on port 5432?
Брандмауэр Windows
Я создал правило для входящих подключений, разрешающее доступ ...
Тип протокола - TCP
Локальный порт- 5432
Удаленный порт - Все порты
Программы - Эта программа -% ProgramFiles% \ PostgreSQL \ 11 \ bin \ postgres.exe
Heroku Logs
Попытка № 1 - локальный хост, ошибка результата
$ pg_ctl -D "C:\Program Files\PostgreSQL\11\data" restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2019-02-19 10:09:04.423 GMT [11952] LOG: listening on IPv6 address "::", port 5432
2019-02-19 10:09:04.423 GMT [11952] LOG: listening on IPv4 address "0.0.0.0", port 5432
2019-02-19 10:09:04.460 GMT [11952] LOG: redirecting log output to logging collector process
2019-02-19 10:09:04.460 GMT [11952] HINT: Future log output will appear in directory "log".
done
server started
$ netstat -ant | findstr 5432
TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING InHost
TCP [::]:5432 [::]:0 LISTENING InHost
$ heroku restart -a pgtester
Restarting dynos on ? pgtester... done
$ heroku logs -t -a pgtester
...lots of stack errors...
2019-02-19T09:52:25.731597+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 437, in connect
2019-02-19T09:52:25.731599+00:00 app[web.1]: return self.dbapi.connect(*cargs, **cparams)
2019-02-19T09:52:25.731600+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
2019-02-19T09:52:25.731602+00:00 app[web.1]: conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
2019-02-19T09:52:25.731604+00:00 app[web.1]: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
2019-02-19T09:52:25.731606+00:00 app[web.1]: Is the server running on host "localhost" (127.0.0.1) and accepting
2019-02-19T09:52:25.731607+00:00 app[web.1]: TCP/IP connections on port 5432?
2019-02-19T09:52:25.731646+00:00 app[web.1]: (Background on this error at: http://sqlalche.me/e/e3q8)
Попытка № 2 - 192.XXX.XX.XXX, время ожидания результата
$ heroku config:set DEV_DATABASE_URL=postgresql://postgres:mysecretpassword@192.XXX.XX.XXX/ProductionData
Setting DEV_DATABASE_URL and restarting ? pgtester... done, v47
DEV_DATABASE_URL: postgresql://postgres:mysecretpassword@192.XXX.XX.XXX/ProductionData
$ heroku restart -a pgtester
Restarting dynos on ? pgtester... done
$ netstat -ant | findstr 5432
TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING InHost
TCP [::]:5432 [::]:0 LISTENING InHost
$ heroku logs -t -a pgtester
...lots of stack errors...
2019-02-19T10:00:57.273592+00:00 app[api]: Set DEV_DATABASE_URL config vars by user email@example.com
2019-02-19T10:00:57.273592+00:00 app[api]: Release v47 created by user email@example.com
2019-02-19T10:01:05.401378+00:00 heroku[web.1]: Starting process with command `waitress-serve --port=44666 flasky:app`
2019-02-19T10:01:05.672789+00:00 heroku[web.1]: Restarting
2019-02-19T10:01:08.193167+00:00 app[web.1]: [heroku-exec] Starting
2019-02-19T10:01:10.388293+00:00 app[web.1]: postgresql://postgres:mysecretpassword@192.XXX.XX.XXX/ProductionData
2019-02-19T10:01:10.897113+00:00 app[web.1]: Serving on http://0.0.0.0:44666
2019-02-19T10:01:12.089984+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2019-02-19T10:01:12.196052+00:00 heroku[web.1]: Process exited with status 143
2019-02-19T10:01:12.358184+00:00 heroku[web.1]: Starting process with command `waitress-serve --port=18540 flasky:app`
2019-02-19T10:01:16.133191+00:00 app[web.1]: [heroku-exec] Starting
2019-02-19T10:01:18.520615+00:00 app[web.1]: postgresql://postgres:mysecretpassword@192.XXX.XX.XXX/ProductionData
2019-02-19T10:01:19.161158+00:00 app[web.1]: Serving on http://0.0.0.0:18540
2019-02-19T10:01:19.687131+00:00 heroku[web.1]: State changed from starting to up
2019-02-19T10:01:33.125392+00:00 heroku[router]: at=info method=GET path="/" host=pgtester.herokuapp.com request_id=7e65dc99-b99f-4b81-8bbe-a4b98adebd91 fwd="185.16.227.58" dyno=web.1 connect=1ms service=231ms status=200 bytes=2077 protocol=https
2019-02-19T10:02:11.389923+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/" host=pgtester.herokuapp.com request_id=6837dbb0-b2e4-44ee-a67c-2f79a1c7c1b6 fwd="185.16.227.58" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=https
Попытка № 3 - 192.XXX.XX.XXX:5432, время ожидания результата
$ pg_ctl -D "C:\Program Files\PostgreSQL\11\data" restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2019-02-19 10:09:04.423 GMT [11952] LOG: listening on IPv6 address "::", port 5432
2019-02-19 10:09:04.423 GMT [11952] LOG: listening on IPv4 address "0.0.0.0", port 5432
2019-02-19 10:09:04.460 GMT [11952] LOG: redirecting log output to logging collector process
2019-02-19 10:09:04.460 GMT [11952] HINT: Future log output will appear in directory "log".
done
server started
$ netstat -ant | findstr 5432
TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING InHost
TCP [::]:5432 [::]:0 LISTENING InHost
$ heroku config:set DEV_DATABASE_URL=postgresql://postgres:mysecretpassword@192.XXX.XX.XXX:5432/ProductionData
Setting DEV_DATABASE_URL and restarting ? pgtester... done, v48
DEV_DATABASE_URL: postgresql://postgres:mysecretpassword@192.XXX.XX.XXX:5432/ProductionData
$ netstat -ant | findstr 5432
TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING InHost
TCP [::]:5432 [::]:0 LISTENING InHost
$ heroku restart -a pgtester
Restarting dynos on ? pgtester... done
$ heroku logs -t -a pgtester
...lots of stack errors...
2019-02-19T10:11:10.352241+00:00 app[api]: Release v48 created by user email@example.com
2019-02-19T10:11:10.352241+00:00 app[api]: Set DEV_DATABASE_URL config vars by user email@example.com
2019-02-19T10:11:17.316331+00:00 heroku[web.1]: Starting process with command `waitress-serve --port=56616 flasky:app`
2019-02-19T10:11:20.998316+00:00 app[web.1]: [heroku-exec] Starting
2019-02-19T10:11:21.724624+00:00 heroku[web.1]: Restarting
2019-02-19T10:11:25.043993+00:00 app[web.1]: postgresql://postgres:mysecretpassword@192.XXX.XX.XXX:5432/ProductionData
2019-02-19T10:11:25.797589+00:00 app[web.1]: Serving on http://0.0.0.0:56616
2019-02-19T10:11:26.872124+00:00 heroku[web.1]: Starting process with command `waitress-serve --port=51247 flasky:app`
2019-02-19T10:11:27.101119+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2019-02-19T10:11:27.211928+00:00 heroku[web.1]: Process exited with status 143
2019-02-19T10:11:29.033774+00:00 app[web.1]: [heroku-exec] Starting
2019-02-19T10:11:30.261042+00:00 app[web.1]: postgresql://postgres:mysecretpassword@192.XXX.XX.XXX:5432/ProductionData
2019-02-19T10:11:30.570976+00:00 app[web.1]: Serving on http://0.0.0.0:51247
2019-02-19T10:11:31.054334+00:00 heroku[web.1]: State changed from starting to up
2019-02-19T10:11:34.448659+00:00 heroku[router]: at=info method=GET path="/" host=pgtester.herokuapp.com request_id=7498e3a1-5a09-419b-8038-fc4bf3ddd642 fwd="185.16.227.58" dyno=web.1 connect=1ms service=170ms status=200 bytes=2077 protocol=https
...lots of stack errors...
2019-02-19T10:16:14.079101+00:00 app[web.1]: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection timed out
2019-02-19T10:16:14.079102+00:00 app[web.1]: Is the server running on host "192.168.10.162" and accepting
2019-02-19T10:16:14.079104+00:00 app[web.1]: TCP/IP connections on port 5432?
2019-02-19T10:16:14.079144+00:00 app[web.1]: (Background on this error at: http://sqlalche.me/e/e3q8)