PG:: ConnectionBad-не удалось подключиться к серверу: отказано в подключении
каждый раз, когда я запускаю свой сервер rails 4.0, я получаю этот вывод.
Started GET "/" for 127.0.0.1 at 2013-11-06 23:56:36 -0500
PG::ConnectionBad - could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (fe80::1) and accepting
TCP/IP connections on port 5432?
:
activerecord (4.0.0) lib/active_record/connection_adapters/postgresql_adapter.rb:825:in `connect'
activerecord (4.0.0) lib/active_record/connection_adapters/postgresql_adapter.rb:542:in `initialize'
activerecord (4.0.0) lib/active_record/connection_adapters/postgresql_adapter.rb:41:in `postgresql_connection'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:440:in `new_connection'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:450:in `checkout_new_connection'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:421:in `acquire_connection'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:356:in `block in checkout'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:355:in `checkout'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:265:in `block in connection'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:264:in `connection'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:546:in `retrieve_connection'
activerecord (4.0.0) lib/active_record/connection_handling.rb:79:in `retrieve_connection'
activerecord (4.0.0) lib/active_record/connection_handling.rb:53:in `connection'
activerecord (4.0.0) lib/active_record/migration.rb:792:in `current_version'
activerecord (4.0.0) lib/active_record/migration.rb:800:in `needs_migration?'
activerecord (4.0.0) lib/active_record/migration.rb:379:in `check_pending!'
activerecord (4.0.0) lib/active_record/migration.rb:366:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__1613334440513032208__call__callbacks'
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
better_errors (0.9.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
better_errors (0.9.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
better_errors (0.9.0) lib/better_errors/middleware.rb:56:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets'
actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call'
railties (4.0.0) lib/rails/engine.rb:511:in `call'
railties (4.0.0) lib/rails/application.rb:97:in `call'
rack (1.5.2) lib/rack/content_length.rb:14:in `call'
thin (1.5.1) lib/thin/connection.rb:81:in `block in pre_process'
thin (1.5.1) lib/thin/connection.rb:79:in `pre_process'
thin (1.5.1) lib/thin/connection.rb:54:in `process'
thin (1.5.1) lib/thin/connection.rb:39:in `receive_data'
eventmachine (1.0.3) lib/eventmachine.rb:187:in `run'
thin (1.5.1) lib/thin/backends/base.rb:63:in `start'
thin (1.5.1) lib/thin/server.rb:159:in `start'
rack (1.5.2) lib/rack/handler/thin.rb:16:in `run'
rack (1.5.2) lib/rack/server.rb:264:in `start'
railties (4.0.0) lib/rails/commands/server.rb:84:in `start'
railties (4.0.0) lib/rails/commands.rb:78:in `block in <top (required)>'
railties (4.0.0) lib/rails/commands.rb:73:in `<top (required)>'
bin/rails:4:in `<main>'
Я запускаю Mavericks OS X 10.9, поэтому я не знаю, если это проблема. Я пробовал все, что мог, но ничего не работает. Я удалил и установил как postgres, так и PG gem несколько раз.
Это моя база данных.yml файл
development:
adapter: postgresql
encoding: unicode
database: metals-directory_development
pool: 5
username:
password:
template: template0
host: localhost
port: 5432
test: &test
adapter: postgresql
encoding: unicode
database: metals-directory_test
pool: 5
username:
password:
template: template0
host: localhost
port: 5432
staging:
adapter: postgresql
encoding: unicode
database: metals-directory_production
pool: 5
username:
password:
template: template0
host: localhost
production:
adapter: postgresql
encoding: unicode
database: metals-directory_production
pool: 5
username:
password:
template: template0
host: localhost
cucumber:
<<: *test
может кто-нибудь помочь мне?
27 ответов:
это может быть так же просто, как черствый PID файл. Это может быть сбой молча, потому что ваш компьютер не завершил процесс выключения полностью, что означает postgres не удалить PID (идентификатор процесса) файл.
файл PID используется postgres, чтобы убедиться, что одновременно работает только один экземпляр сервера. Поэтому, когда он снова запускается, он терпит неудачу, потому что уже есть PID файл, который говорит postgres что другой экземпляр сервера был запущен (даже если он не работает, он просто не добрался до завершения работы и удаления PID).
- чтобы исправить это, удалите / переименуйте файл PID. Найдите каталог данных postgres. На MAC с помощью homebrew это
/usr/local/var/postgres/
, другие системы это может быть/usr/var/postgres/
.- чтобы убедиться, что это проблема, посмотрите на лог-файл (
server.log
). На последних строках вы увидите:смертельный: файл блокировки " почтмейстер.пид" уже существует
Подсказка: другой почтмейстер (PID 347) работает в каталоге данных "/usr/local/var/postgres"?
- если да, то
rm postmaster.pid
перезагрузите сервер. На mac с помощью launchctl (с homebrew) следующие команды перезапустят сервер.
launchctl unload homebrew.mxcl.postgresql.plist launchctl load -w homebrew.mxcl.postgresql.plist
или на более новых версиях квас
brew services restart postgresql
после долгих поисков и анализа я нашел решение, если вы используете ubuntu просто напишите эту команду в своем терминале и нажмите enter
sudo service postgresql restart
это перезапустит ваш PostgreSQL, надеюсь, что это будет behelp для вас.
мне удалось решить проблему, следуя ответу Криса Слейда, но для перезагрузки сервера мне пришлось использовать следующие команды:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
что я нашел здесь (pjammer в самом низу)
чтобы исправить эти проблемы с Postgres и работать с Postgres on
Mac OSX
, Это, наверное лучшие и самый простой решение, которое я нашел до сих пор:просто скачайте, установите и будьте счастливы :)
у вас есть postgresql установлен в вашей системе? Если нет, то смотрите установить postgresql. После того, как вы успешно интегрироваться postgresql в вашей системе вы можете ввести что-то вроде этого в вашем системном терминале:
which psql #=> /usr/bin/psql
после этого вам нужно создать пользователя и базу данных в PostgreSQL такой:
sudo su - postgres psql
тогда вы можете увидеть следующее в вашем терминале
postgres=#
тип там:
CREATE USER yourname WITH PASSWORD 'passwordhere'; CREATE DATABASE metals-directory_production WITH OWNER yourname; GRANT ALL PRIVILEGES ON DATABASE metals-directory_production TO yourname;
после того, как вы сделаете это, то вы должны исправить ваш
database.yml
. Наверное, нужно что-то вроде этого:development: adapter: postgresql encoding: unicode database: metals-directory_development pool: 5 username: yourname password: passwordhere ### password you have specified within psql host: localhost port: 5432 ### you can configure it in file postgresql.conf
кроме того, если у вас есть проблемы с PostgreSQL это хорошая идея, чтобы проверить файл pg_hba.conf
эта проблема возникает, когда postgres не закрывается должным образом. Вот как я решил эту проблему в три простых шага.
Шаг 1: перейдите в каталог postgres
Пользователи Mac найдете это в
/usr/local/var/postgres
, другие могут посмотреть/usr/var/postgres/
.Шаг 2: удалить
.pid
файл, выполнив эту команду.rm postmaster.pid
Шаг 3: перезагрузить сервер
Mac Пользователи
brew services restart postgresql
Пользователей Linux
sudo service postgresql restart
наконец перезагрузите приложение, и вы хорошо идти.
удалить pg:
gem uninstall pg
удалить postgres:
brew uninstall postgres
Nuke папка postgres, которая может задерживаться с кучей несвежих вещей его в:
rm -rf /usr/local/var/postgres
перезагрузка (возможно, ненужных)
переустановить pg:
brew install postgres
мой комментарий в ответе Криса Слейда начинается pg трудный путь, теперь я использую услуги brew, которые имеют упростил мою жизнь во многих отношениях:
brew install services
и начните pg с него:
brew services start postgresql
переустановите gem:
gem install pg
и bobsyouruncle.
проверить файл postgresql.conf (on
ubuntu
- в / etc/postgresql/X. X/main / postgresql.conf) и посмотрите на строку, которая говорит:listen_addresses="localhost"
попробуйте изменить его на:
listen_addresses="*"
он будет принимать все IP-адреса, затем проверьте строку, которая говорит:
port=5432
и проверьте, является ли тот же порт вашей базы данных.yml, по умолчанию на моем postgresql-9.2 используйте 5433 вместо 5432 не забудьте перезагрузка сервер postgres,
Удачи!
как описано @Magne, ошибка
PG::ConnectionBad - could not connect to server: Connection refused
может быть представлен после мажорная / минорная версия обновление (например,9.5 -> 9.6
или9 -> 10
) PostgreSQL.я получил эту ошибку после запуска
brew upgrade postgresql
после выпуска PostgreSQL версии 9.6. Проблема заключается в том, что основные/второстепенные обновления версии требуют дополнительных шагов для переноса старой даты в новую версию.Как проверить, если это ваша проблема
вы можете проверьте, не является ли это проблемой, проверив последнюю версию Формулы brew PostgreSQL, установленную с homebrew...
$ brew info postgresql /usr/local/Cellar/postgresql/9.5.4_1 (3,147 files, 35M) Poured from bottle on 2016-10-14 at 13:33:28 /usr/local/Cellar/postgresql/9.6.1 (3,242 files, 36.4M) * Poured from bottle on 2017-02-06 at 12:41:00
...и затем сравнивая его с текущим PG_VERSION
$ cat /usr/local/var/postgres/PG_VERSION 9.5
если PG_VERSION меньше, чем последняя формула brew, и разница является основным/второстепенным изменением версии, то это, вероятно, ваша проблема.
как исправить (т. е. Как обновить данные)
ниже инструкции для обновления 9.5 и 9.6. Измените номера версий в соответствии с вашим собственным обновлением
Шаг 1. убедитесь, что PostgreSQL выключен:
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist # or, with Homebrew... $ brew services stop postgresql
Шаг 2. создать новую первозданную базу данных:
$ initdb /usr/local/var/postgres9.6 -E utf8
Шаг 3. проверьте, что такое старые и новые двоичные версии:
$ ls /usr/local/Cellar/postgresql/ 9.5.3 9.5.4 9.6.1
обратите внимание, что в этом примере я обновляю из 9.5.4 бинарных для бинарных 9.6.1
Шаг 4. перенести текущие данные в новую базу данных с помощью утилиты pg_upgrade утилиты.
$ pg_upgrade \ -d /usr/local/var/postgres \ -D /usr/local/var/postgres9.6 \ -b /usr/local/Cellar/postgresql/9.5.4/bin/ \ -B /usr/local/Cellar/postgresql/9.6.1/bin/ \ -v
-d
флаг указывает текущий каталог данных-D
флаг указывает новый каталог данных, который будет создан-b
указывает старый двоичный файл-B
указывает новый двоичный файл, который мы обновляем кШаг 5. переместить старый каталог данных в сторону
$ mv /usr/local/var/postgres /usr/local/var/postgres9.5
Шаг 6. переместить вновь созданный каталог данных туда, где PostgreSQL ожидает его
$ mv /usr/local/var/postgres9.6 /usr/local/var/postgres
Шаг 7. снова запустить PostgreSQL
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist # or, if you're running a current version of Homebrew $ brew services start postgresql
Шаг 8. если вы используете PG gem для Rails, вы должны перекомпилировать удаление и переустановка gem (пропустите этот шаг, если вы не используете PG gem)
$ gem uninstall pg $ gem install pg
Шаг 9.(необязательно) после того, как вы убедили себя, что все работает нормально, вы можете запустить восстановить некоторое дисковое пространство с помощью следующей команды:
brew cleanup postgresql
...и если вы чувствуете себя действительно храбрым, вы можете удалить старый каталог данных PostgreSQL с помощью следующей команды
rm -rf /usr/local/var/postgres9.5/
(этот ответ на основе отличной записи в блоге https://keita.блог/2016/01/09/homebrew-and-postgresql-9-5/ С некоторыми дополнениями)
как было предложено выше, я только что открыл Сервер Приложений на моем Mac, нажмите Открыть
Psql
, закрыт
если вы попали в эту проблему после выполнения
brew upgrade
который обновил postgres до новой основной версии (f. ex9.3.0
до9.4.0
или выше), то делаем так:@dmitrygusev от https://github.com/Homebrew/homebrew/issues/35240следующее официальное руководство по миграции [Postgresql] помогло:
brew switch postgres 9.3.5 # presuming you already installed 9.4.1 pg_dumpall > outputfile launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist mv /usr/local/var/postgres /usr/local/var/postgres.old brew switch postgres 9.4.1 initdb -D /usr/local/var/postgres psql -d postgres -f outputfile
вот и все. Проверьте, хорошо ли прошел импорт, а затем удалите резервные копии:
rm outputfile rm -Rf /usr/local/var/postgres.old
вопрос вот что на главном обновлении версии postgres необходимо воссоздать / перенести вашу базу данных. И, возможно,
chown
каталоги или вручную вызовinitdb
.Читайте также: Как обновить PostgreSQL с версии 9.5 до версии 9.6 без потери данных?
некоторые другие советы, которые могут пригодиться, если вы не используете Homebrew:
как остановить сервер PG вручную:
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log stop
How to запустите PG server вручную:
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
поставить
host: localhost
indatabase.yml
файл и выполните следующую команду:rake db:create db:migrate
найдите свой файл postgres он может быть в
/usr/local/var/postgres/
или/usr/var/postgres/
а затем удалитьpostmaster.pid
файл присутствует в этой папке.
Это был определенно ответ @ Chris Slade, который помог мне.
Я написал небольшой скрипт, чтобы убить эти оставшиеся процессы, если это полезно:
kill_postgres() { if [[ $* -eq "" ]]; then echo "Usage: 'kill_postgres <db_name>' to kill remaining instances (Eg. 'kill_postgres my_app_development')" else gksudo echo "Granted sudo" pids="$(ps xa | grep postgres | grep $* | awk '{print }' | xargs)" if [[ $pids -eq "" ]]; then echo "Nothing to kill" else for pid in "${pids[@]}" do echo "Killing ${pid}" sudo kill $pid echo "Killed ${pid}" done kill_postgres $* fi fi }
У меня была такая же проблема в производстве (разработка все работало), в моем случае сервер БД не на той же машине, что и приложение, поэтому, наконец, то, что сработало, просто нужно перенести, написав:
bundle exec rake db:migrate RAILS_ENV=production
а затем перезагрузить сервер и все работало.
Я знаю, что это поздно, но может кому-то помочь. У меня была такая же проблема. Оказывается, у меня было две версии postgres 9.1 и 9.5. Я удалил 9.1 и 9.5 и снова установил 9.5, и это сработало для меня.
у меня была та же проблема. Я проверяю последнюю строку
PostgreSQL
файлы журнала в/var/log/postgresql
. В файле в/etc/postgresql и/9.5/главная/базы данных PostgreSQL.conf. Комментируя строку ошибки вpostgresql.conf
решена моя проблема.
моя проблема была в моей приложение.в формате YML. Моя база данных
url
onheroku
не использовал порт 5342. Проверьте вашheroku
configvar DATABASE_URL
. Убедитесь, что совпадает с вашим приложение.в формате YML для соответствующей базы данных.
У меня была такая же проблема, это объяснение решило ее для меня:http://blog.55minutes.com/2013/09/postgresql-93-brew-upgrade/
ключевой шаг смотрел на хвост моего / usr / local/var/postgres / server.журнал , это позволило мне увидеть, в чем была настоящая проблема, которая заключалась в том, что я не полностью завершил процесс обновления PostgreSQL
пользователи Mac с приложением Postgres могут захотеть открыть приложение (spotlight search Postgres или найти значок слона в строке меню). Там вы можете увидеть Красный Крест с сообщением: "несвежий почтмейстер.пид файл". К сожалению, поиск spotlight не покажет местоположение этого файла. Нажмите Кнопку " Настройки Сервера...", и в открывшемся диалоговом окне нажмите кнопку" Показать", чтобы открыть каталог данных. Перейдите в одну папку (для меня это был "var-10") и удалите
postmaster.pid
файл.вернитесь в приложение Postgres и нажмите кнопку Пуск. Этот красный X должен превратиться в зеленую галочку с сообщением "работает". Теперь вы должны иметь возможность успешно запускать команды Rails, такие как
rails server
в терминале.
я столкнулся с этой ошибкой после
brew upgrade
в котором postgresql был обновлен. Я нашел точно, как исправить мою проблему с этого Великого поста. Я смог восстановить и запустить postgres и даже перенести все мои существующие базы данных. https://coderwall.com/p/ti4amw/how-to-launch-postgresql-after-upgrade
у меня просто была эта проблема, и ни одно из предложенных решений не сработало для меня. После долгих поисков в Интернете я нашел решение. Это то, что сработало для меня.
во-первых, я должен был запустить эту команду, чтобы запустить сервер, и я предполагаю, установить расположение файла конфигурации.
pg_ctl -D /usr/local/var/postgres start && brew services start postgresql
затем я запустил эту команду для доступа к postgres
psql postgres
и в приглашении postgres затем я набрал "\du", чтобы перечислить роли
postgres=# \du
роль postgres была отсутствует поэтому мне пришлось создать его с помощью этой команды
CREATE ROLE POSTGRES WITH SUPERUSER CREATEDB CREATEUSER CREATEROLE REPLICATION BYPASSRLS ;
это решило мою проблему, и я надеюсь, что это поможет кому-то еще.
вам не нужно удалять
? Простоpostmaster.pid
файл, так как это может вызвать повреждение данных.kill
процесс (не используйтеkill -9
, просто обычное убийство будет делать).затем просто перезагрузите сервер postgres, и вы хорошо идти!
вот шаги для достижения этого:
найдите и откройте
postmaster.pid
файл (мой находится на Mac Сьерра)
vi ~/Library/Application\ Support/Postgres/var-10/postmaster.pid
скопируйте PID-это номер в первой строке
postmaster.pid
file- убить процесс с
kill PID
, например, если мой PID 381, я сделаюkill 381
- перезагрузка postres предлагает - если используете самогон, сделать
brew services start postgresql
. Или если вы используете postgresapp, просто нажмите