#django #postgresql
#django #postgresql
Вопрос:
У меня странная проблема. Я могу подключиться к удаленному хосту с помощью psql из командной строки, но не могу использовать те же учетные данные в файле настроек django. Я получаю сообщение об ошибке:
Не удалось подключиться к серверу: Отказано в разрешении серверу, работающему на хосте «удаленный ip» и принимающему соединения TCP / IP на порту port_number порта?
Если я могу подключиться с помощью psql, а не с помощью django, чего мне здесь не хватает? Я также проверил через интерпретатор python, что я могу загрузить psycopg2.
Любая помощь приветствуется, поскольку не помогло то, что я нашел в Интернете.
Приветствия,
D
Вот db conf в settings.py
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '<db name goes here>', # Or path to database file if using sqlite3.
'USER': '<db user>', # Not used with sqlite3.
'PASSWORD': '<pswd goes here>', # Not used with sqlite3.
'HOST': '<remote ip goes here>',
'PORT': '5432',
}
Комментарии:
1. Вам нужно будет опубликовать некоторый пример кода / конфигурации.
2. Я мог бы это сделать … но вот кое-что более интересное… Я могу запустить команду python manage.py запустите сервер, и я могу использовать site…it должно быть что-то с apache, но какое отношение apache имеет к подключениям к БД?
3. Конечно, это так. Apache запускает ваш сервер приложений (mod_wsgi) в качестве модуля. У вас может не быть разрешения на подключение к базе данных как у пользователя, работающего под управлением wsgi / apache, если postgres разрешает подключения только от определенного пользователя
Ответ №1:
Судя по вашему описанию, это как-то связано с Apache и его разрешениями на доступ к базе данных. Вы не упомянули, какую ОС вы используете, но если на ней запущен SELinux, правила по умолчанию запрещают apache подключаться к БД. Если это так, вы можете временно включить его, выполнив:
setsebool httpd_can_network_connect_db
Здесь приведены более подробные инструкции.
Комментарии:
1. Ах да, извините за это … это в Red Hat.
2. Это сделало свое дело … после перезагрузки все было в порядке. Приветствия.
Ответ №2:
Чтобы изменения сохранялись при перезагрузках (протестировано на Centos):
setsebool -P httpd_can_network_connect_db on
подробнее здесь
Ответ №3:
Протестировано на CentOS.
service httpd stop
service postgresql stop
setsebool -P httpd_can_network_connect 1
service httpd start
service postgresql start
Ответ №4:
Предоставление неверных учетных данных для аутентификации приложению Django может привести к этой проблеме. Чтобы решить эту проблему, вы можете выполнить следующие шаги:
-
Убедитесь, что Postgres установлен:
apt show postgresql
-
Проверьте, запущен ли PostgreSQL:
sudo service postgresql status
-
Убедитесь, что вы действительно можете подключиться к PostgreSQL
sudo su - postgres
-
После того, как в пользовательском postgres запустите командный интерфейс
psql
-
Проверьте информацию о подключении, выполнив:
conninfo
В моем случае я давно установил Postgres и просто забыл информацию о доступе, такую как имя пользователя, пароль, название базы данных или доступ к порту.