Каждый раз, когда я запускаю сервер 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
Кто-нибудь может мне помочь?
Это может быть так же просто, как устаревший PID файл. Это может быть неудачно, потому что ваш компьютер полностью не завершил процесс останова, что означает, что postgres не удалил файл идентификатора PID (process id). Файл PID используется postgres, чтобы обеспечить одновременный запуск только одного экземпляра сервера. Поэтому, когда он запускается снова, он терпит неудачу, потому что уже есть файл PID, который сообщает postgres, что был запущен другой экземпляр сервера (хотя он не работает, он просто не смог завершить работу и удалить PID).
/usr/local/var/postgres/
, другие системы - /usr/var/postgres/
.server.log
). На последних строках вы увидите: FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 347) running in data directory "/usr/local/var/postgres"?
rm postmaster.pid
Перезагрузите сервер. На mac с использованием launchctl (с помощью homebrew) следующие команды перезапускают сервер.
launchctl unload homebrew.mxcl.postgresql.plist
launchctl load -w homebrew.mxcl.postgresql.plist
ИЛИ в новых версиях Brew
brew services restart postgresql
FATAL: could not open directory "pg_tblspc": No such file or directory
. Этот ответ помог мне с этой проблемой stackoverflow.com/questions/25970132/…
gem uninstall pg
), удалил postgres ( brew uninstall postgres
), а затем очистил папку postgres, в которой находилась куча устаревших rm -rf /usr/local/var/postgres
( rm -rf /usr/local/var/postgres
). После перезагрузки brew install postgres
, ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
, launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
и ARCHFLAGS="-arch x86_64" gem install pg
. Я не знаю, сколько других решений я пробовал, прежде чем заставить это работать.
Мне удалось решить проблему, выполнив ответ Криса Слейда, но для перезагрузки сервера мне пришлось использовать следующие команды
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
что я нашел здесь (ответ pjammer внизу внизу)
После большого поиска и анализа я нашел решение, если вы используете ubuntu, просто напишите эту команду в своем терминале и нажмите enter
sudo service postgresql restart
Это перезапустит PostgreSQL, надеюсь, что это будет полезно для вас.
Чтобы устранить эти проблемы с помощью Postgres и работать с Postgres на Mac OSX, это, вероятно, решение BEST и EASIEST, которое я нашел до сих пор:
Просто скачайте, установите и будьте счастливы:)
У вас установлен 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
Удалить pg...
gem uninstall pg
Удалить postgres...
brew uninstall postgres
Загрузите папку postgres, которая может задерживаться кучей устаревшего материала в...
rm -rf /usr/local/var/postgres
Перезагрузите (возможно, не нужно)
Переустановите pg...
brew install postgres
Мой комментарий в ответ Криса Слейда начинается с жесткого пути, теперь я использую службы brew, которые упростили мою жизнь по-разному...
brew install services
... и запустите pg с ним...
brew services start postgresql
Установите жемчужину...
gem install pg
И bobsyouruncle.
lunchy stop postgres
после lunchy start postgres
после lunchy start postgres
проверьте файл postgresql.conf (на ubuntu находится в /etc/postgresql/ XX/main/postgresql.conf) и найдите строку, которая говорит
listen_addresses="localhost"
попробуйте изменить его на
listen_addresses="*"
он будет принимать все IP-адреса, затем проверит строку, в которой говорится
port=5432
и проверьте, является ли тот же порт вашего database.yml, по умолчанию на моем postgresql-9.2 используйте 5433 вместо 5432, не забудьте перезапустите сервер postgres, удачи
Эта проблема возникает, когда 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
Наконец, перезапустите приложение, и вам будет хорошо.
rm postmaster.pid
. Спасибо!
Как описано @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, вы должны перекомпилировать, удалив и переустановив драгоценный камень (пропустите этот шаг, если вы не используете жемчуг 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/ с некоторыми дополнениями)
Как было сказано выше, я только что открыл приложение Postgres на своем Mac, нажал Open Psql, закрыл окно psql, перезапустил мой сервер rails в моем терминале, и он снова работал, больше не было ошибок.
Доверяйте слону: http://postgresapp.com/
поместите "host: localhost" в файл database.yml и запустите эту команду: rake db: create db: migrate
Найдите файл postgres, который может находиться в /usr/local/var/postgres/
или /usr/var/postgres/
, а затем удалите файл postmaster.pid
, присутствующий в этой папке.
Если вы столкнулись с этой проблемой после выполнения brew upgrade
, который обновил postgres до новой основной версии (f.ex 9.3.0
до 9.4.0
или выше), сделайте следующее:
@dmitrygusev fix из 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
Я просто набрал sudo service postgresql restart и все снова работало.
У меня была та же проблема. Я проверяю последнюю строку файлов журнала PostgreSQL в /var/log/postgresql. В файле "/etc/postgresql/9.5/main/postgresql.conf" был установлен нераспознанный параметр конфигурации. Комментирование строки ошибки в postgresql.conf разрешило мою проблему.
Я знаю, что это поздно, но может помочь кому-то. У меня была такая же проблема. Оказывается, у меня были две версии postgres 9.1 и 9.5. Я удалил 9.1 и 9.5 и снова установил 9.5, и это сработало для меня.
У меня была такая же проблема в производстве (разработка все работала), в моем случае сервер БД не на том же компьютере, что и приложение, поэтому, наконец, все, что работало, это просто выполнить миграцию, написав:
bundle exec rake db:migrate RAILS_ENV=production
а затем перезагрузите сервер, и все сработало.
Моя проблема была в моем файле application.yml. Моя база данных url на heroku не использовала порт 5342. Проверьте свою конфигурацию heroku var DATABASE_URL. Убедитесь, что совпадения в точности совпали с вашим application.yml для соответствующей базы данных.
Это был определенно ответ Криса Слейда, который помог мне.
Я написал немного script, чтобы убить оставшиеся процессы, если полезно:
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
}
У меня была та же проблема, это объяснение разрешило это для меня: http://blog.55minutes.com/2013/09/postgresql-93-brew-upgrade/
ключевой шаг смотрел на хвост моего /usr/local/var/postgres/server.log, который позволил мне посмотреть, какова реальная проблема, а именно, что я не полностью завершил процесс обновления postgres
server.log
. Нашел мой ответ здесь: stackoverflow.com/questions/25970132/…
Я столкнулся с этой ошибкой после следующего brew upgrade
, в котором была обновлена postgresql. Я нашел, как исправить мою проблему с этой большой должности. Я смог восстановить и запустить postgres и даже переместился по всем моим существующим базам данных.
https://coderwall.com/p/ti4amw/how-to-launch-postgresql-after-upgrade
Я остановил сервер rails, запустил rake db:migrate
и начал мой rails s
.
Возможно, вы перезапустили свой компьютер и забыли запустить приложение Postgres.