it-swarm.com.ru

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 несколько раз.

Это мой файл database.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

Может кто-нибудь мне помочь?

235
fadelakin

Это может быть так же просто, как устаревший файл PID . Это может произойти сбой в фоновом режиме, потому что ваш компьютер не завершил процесс завершения работы полностью, что означает postgres не удалил файлPID(идентификатор процесса). 

PID-файл используется postgres для проверки того, что одновременно работает только один экземпляр сервера. Поэтому, когда он снова запускается, происходит сбой, поскольку уже существует файлPID, который сообщает postgres , что запущен другой экземпляр сервера (даже если он не запущен, он просто не не получается отключить и удалить PID).

  1. Чтобы исправить это, удалите/переименуйте файл PID. Найдите каталог данных postgres. На MAC, использующем homebrew, это /usr/local/var/postgres/, в других системах это может быть /usr/var/postgres/.
  2. Чтобы убедиться, что это проблема, посмотрите файл журнала (server.log). На последних строках вы увидите: 

ФАТАЛЬНО: файл блокировки "postmaster.pid" уже существует
СОВЕТ: Другой почтмейстер (PID 347) работает в каталоге данных "/ usr/local/var/postgres"?

  1. Если так, rm postmaster.pid
  2. Перезагрузите ваш сервер. На Mac с помощью launchctl (с homebrew) следующие команды перезапустят сервер.

    launchctl unload homebrew.mxcl.postgresql.plist  
    launchctl load -w homebrew.mxcl.postgresql.plist
    

    ИЛИ на более новых версиях Brew  

    brew services restart postgresql
    
551
Chris Slade

После долгих поисков и анализа я нашел решение, если вы используете Ubuntu, просто введите эту команду в свой терминал и нажмите Enter

Sudo service postgresql restart

Это перезапустит ваш PostgreSQL, надеюсь, это поможет вам.

39
Jai Kumar Rajput

Мне удалось решить проблему, следуя ответу Криса Слейда, но для перезапуска сервера мне пришлось использовать следующие команды:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

что я нашел здесь (ответ Пьяммера внизу)

32
Andrea Gherardi

У вас установлен 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

22
Mihail Davydenkov

Чтобы устранить проблемы такого типа с Postgres и работать с Postgres в Mac OSX, это, вероятно, BEST и EASY решение, которое я нашел до сих пор:

http://postgresapp.com/

Просто скачайте, установите и будьте счастливы :)

22
K M Rakibul Islam

Эта проблема возникает, когда 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

Наконец, перезапустите приложение, и все готово.

21
techdreams
  1. Удалить pg:

    gem uninstall pg
  2. Удалить postgres:

    brew uninstall postgres
  3. Разбейте папку postgres, которая может задержаться в куче устаревших вещей:

    rm -rf /usr/local/var/postgres
  4. Перезагрузка (возможно, ненужная)

  5. Переустановите pg:

    brew install postgres
  6. Мой комментарий в ответе Криса Слэйда начинается с трудного пути, теперь я пользуюсь услугами brew, которые упростили мою жизнь во многих отношениях:

    brew install services
  7. И начните с него pg:

    brew services start postgresql
  8. Переустановите драгоценный камень:

    gem install pg

И бобсюрункл.

16
IAmNaN

проверьте файл postgresql.conf (на ubuntu находится в /etc/postgresql/X.X/main/postgresql.conf ) и найдите строку, которая говорит:

listen_addresses="localhost"

попробуйте изменить это на:

listen_addresses="*"

он будет принимать все IP, затем проверьте строку, которая говорит:

port=5432

и проверьте, является ли тот же порт вашего database.yml, по умолчанию в моем postgresql-9.2 используется 5433 вместо 5432 , не забудьте перезагрузить сервер postgres, 

Удачи!

12
Alexis

Как описано в @Magne, ошибка PG::ConnectionBad - could not connect to server: Connection refused может быть представлена ​​после основной/вспомогательной версии upgrade (например, 9.5 -> 9.6 или 9 -> 10) PostgreSQL. 

Я получил эту ошибку после запуска brew upgrade postgresql после выпуска версии 9.6 PostgreSQL. Проблема заключается в том, что для обновления основной/вспомогательной версии требуются дополнительные шаги для переноса старой даты в новую версию.

Как проверить, если это ваша проблема

Вы можете проверить, является ли это проблемой, проверив последнюю версию формулы 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 для Rails, вам следует перекомпилировать его, удалив и переустановив гем (пропустите этот шаг, если вы не используете гем pg)

$ gem uninstall pg
$ gem install pg

Шаг 9. (необязательно) После того, как вы убедились, что все работает хорошо, вы можете запустить восстановление дискового пространства с помощью следующей команды:

brew cleanup postgresql

... и если вы чувствуете себя действительно смелым, вы можете удалить старый каталог данных PostgreSQL с помощью следующей команды

rm -rf /usr/local/var/postgres9.5/

(Этот ответ основан на отличном сообщении в блоге https://keita.blog/2016/01/09/homebrew-and-postgresql-9-5/ с некоторыми дополнениями)

11
Neil Atkinson

Как было предложено выше, я просто открыл приложение Postgres на моем Mac, щелкнул Открыть Psql, закрыл окно psql, перезапустил мой сервер Rails в моем терминале, и он снова заработал, больше никаких ошибок. 

Доверься слону: http://postgresapp.com/

7
houstongolden

Это то, что действительно помогло мне.

$ cd /usr/local/var/postgres/
$ rm postmaster.pid

Ссылка: http://alumni.lewagon.org/questions/60

6
Rosana Ruiz

Если вы столкнулись с этой проблемой после выполнения brew upgrade, который обновил postgres до новой основной версии (от f.ex 9.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

Как запустить PG-сервер вручную:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

5
Magne

поместите Host: localhost в файл database.yml и выполните эту команду:

rake db:create db:migrate  
4
Abel

Найдите файл postgres, он может быть в /usr/local/var/postgres/ или /usr/var/postgres/, а затем удалите файл postmaster.pid, присутствующий в этой папке. 

3
Awais Shafqat

Я получил ту же проблему после обновления моего Mac на Osx Movaje.

я нашел это решение:

Попробуйте сначала приведенную ниже командную строку в вашем терминале: 

brew services restart postgresql

Если ничего не изменится:

ps aux | grep postgres

Если ничего не изменилось:

ls -ls | grep post

Последняя команда, чтобы исправить это, удалила файл блокировки postgres, выполнив от root:

rm /usr/local/var/postgres/postmaster.pid

а потом :

brew services restart postgresql

Из berziiii: https://github.com/ga-wdi-boston/capstone-project/issues/325

Надеюсь, что это поможет :)

С уважением !!

3
Basile

Я просто запускаю эту команду Sudo service postgresql restart И все снова работает.

2
kalibbala

Вы, вероятно, перезагрузили компьютер и забыли запустить приложение Postgres. 

1
The Whiz of Oz

Я знаю, что уже поздно, но мог бы помочь кому-то ... У меня была такая же проблема. Оказывается, я бы сделал две версии postgres 9.1 и 9.5. Я удалил 9.1 и 9.5 и снова установил 9.5, и это сработало для меня.

1
Darshan Chauhan

Пользователи Mac с приложением Postgres могут захотеть открыть приложение (выделите поиск в Postgres или найдите значок слона в строке меню). Там вы можете увидеть красный крестик с сообщением: «Устаревший файл postmaster.pid». К сожалению, поиск в центре внимания не покажет местоположение этого файла. Нажмите «Настройки сервера ...» и в открывшемся диалоговом окне нажмите кнопку «Показать», чтобы открыть каталог данных. Перейдите в одну папку (для меня это была "var-10") и удалите файл postmaster.pid.

Вернитесь в приложение Postgres и нажмите кнопку «Пуск». Этот красный X должен превратиться в зеленую галочку с сообщением «Выполняется». Теперь вы сможете успешно запускать команды Rails, такие как Rails server, в терминале.

 Postgres App Server Settings - Show Data Directory

1
chemturion

Моя проблема была в моем application.yml файле. Моя база данных url на heroku не использовала порт 5342. Проверьте конфигурацию herokuvar DATABASE_URL. Убедитесь, что он точно совпадает с тем, что было в вашем application.yml для соответствующей базы данных.

1
NickDK

У меня такая же проблема. Я проверяю последнюю строку PostgreSQL файлов журнала в /var/log/postgresql. В файле /etc/postgresql/9.5/main/postgresql.conf есть нераспознанный параметр конфигурации. Комментирование строки ошибки в postgresql.conf решило мою проблему.

1
Hajar Homayouni

Это был определенно ответ @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 $1}' | 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
}
1
Augustin Riedinger

У меня была та же проблема, это объяснение решило ее для меня: http://blog.55minutes.com/2013/09/postgresql-93-brew-upgrade/

ключевым шагом было посмотреть на хвост моего /usr/local/var/postgres/server.log, , который позволил мне увидеть реальную проблему, заключающуюся в том, что я не полностью завершил процесс обновления PostgreSQL

1
Ben Wheeler

У меня была та же проблема на производстве (разработка работала), В моем случае сервер БД находится на не на той же машине, что и приложение, так что, наконец, сработало просто выполнить миграцию, написав:

bundle exec rake db:migrate Rails_ENV=production

а затем перезагрузите сервер и все заработало.

1
leah

Вам не нужно удалять файл postmaster.pid, так как это может привести к повреждению данных.

Вариант? Просто kill процесс (не используйте kill -9, подойдет обычное kill).

Затем просто перезапустите сервер postgres, и все готово!

Вот шаги для достижения этого:

  1. Найдите и откройте файл postmaster.pid (мой находится на Mac Sierra)

    vi ~/Library/Application\ Support/Postgres/var-10/postmaster.pid

  2. Скопируйте PID - это номер в первой строке файла postmaster.pid

  3. Завершите процесс с помощью kill PID, например, если мой PID равен 381, я сделаю kill 381
  4. Перезапустите Postres - если вы используете brew, выполните brew services start postgresql. Или, если вы используете postgresapp, просто нажмите кнопку start
0
Ruto Collins

Я остановил сервер Rails, запустил rake db:migrate и запустил свой Rails s.

0
thedanotto

Я столкнулся с этой ошибкой после следования brew upgrade, в котором был обновлен postgresql. Я нашел именно то, как исправить мою проблему из этого великого поста. Я смог восстановить и запустить postgres и даже перенести все существующие базы данных . https://coderwall.com/p/ti4amw/how-to-launch-postgresql-after-upgrade

0
Calaway

У меня просто была эта проблема, и ни одно из предложенных решений не помогло мне. После долгих поисков я нашел решение. Это то, что сработало для меня.

Сначала мне нужно было запустить эту команду, чтобы запустить сервер, и я угадал установить местоположение файла конфигурации.

pg_ctl -D /usr/local/var/postgres start && brew services start postgresql

Затем я запустил эту команду для доступа к postgres

psql postgres

И в Postgres Prompt я набрал "\ du", чтобы получить список ролей.

postgres=# \du

Роль postgres отсутствовала, поэтому мне пришлось создать ее с помощью этой команды

CREATE ROLE POSTGRES WITH SUPERUSER CREATEDB CREATEUSER CREATEROLE REPLICATION BYPASSRLS ;

Это решило мою проблему, и я надеюсь, что это поможет кому-то еще.

0
luis.madrigal