Недавно я обновился до OSX 10.7, после чего моя установка рельсов была полностью запущена при попытке подключиться к серверу psql. Когда я делаю это из командной строки, используя
psql -U postgres
он работает отлично, но когда я пытаюсь запустить сервер или консоль rails с тем же именем пользователя и паролем, я получаю эту ошибку
...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError)
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
Любые идеи, которые могли бы произойти, были бы очень полезны! Спасибо!
Это проблема PATH. Теперь Mac OSX Lion включает Postgresql в систему. Если вы выполните which psql
, вы скорее всего увидите usr/bin/psql
вместо usr/local/bin/psql
, который является HomeBrew правильным. Если вы запустите brew doctor
, вы должны получить сообщение о том, что вам нужно добавить usr/local/bin
в заголовок переменной env PATH.
Редактирование вашего .bash_profile или .profile или любой оболочки, которую вы используете, и добавления:
export PATH=/usr/local/bin:$PATH
как первый экспорт для PATH
, то либо выходите из сеанса оболочки, либо создайте файл с помощью source ~/.bash_profile
, и теперь он снова будет в порядке.
Для тех из вас, кого это интересует, я собрал решение. Все, что мне было нужно, это добавить
host: localhost
в базу данных .yml для моей среды, и все было подлито.
У меня была эта проблема с Mountain Lion, но единственное, что сработало для меня, было это исправление:
Проверьте, где находится реальная цель:
sudo find / -name .s.PGSQL.5432
Мне нужно было создать этот каталог:
mkdir /var/pgsql_socket/
Затем, используя результат из найденной выше, создайте эту символическую ссылку:
ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
Я подозреваю, что для большинства людей в Mountain Lion вы можете просто создать директорию и сделать символическую ссылку, а не тратить время на поиск, если симлинк не работает.
PS - мой PostgreSQL был установлен через официальный установщик.
Если проблема сохраняется после изменения пути (как и для меня), попробуйте это...
gem pristine pg
Похоже, что проблема (частично) лежит в самом pg gem. Когда он строит, он определяет, где должен быть сокет домена. Если вы измените местоположение сокета домена после того, как он не действует, пока вы не восстановите драгоценный камень.
Для тех, кто установлен прямо из официального установщика, просто добавление хоста в команду работает без изменений пути:
psql -h localhost -U postgres
У меня была одна и та же проблема, и у меня возникли проблемы с решением решения Джона Ванга. Поскольку Даррен заметил там проблему с жемчужиной pg. Чтобы получить работу, мне нужно:
gem uninstall pg
Затем переустановите.
Что заработало.
Это для доморощенного? Порты, кажется, помещают это:
/opt/local/lib/postgresql91
Поэтому убедитесь, что вы используете экспорт
PATH=/opt/local/lib/postgresql91/bin:$PATH
Проблемы с портами Mac: https://trac.macports.org/ticket/30125
Я тоже столкнулся с этим, но сам установил postgres (не с доморощенным). Если это так, вам нужно найти старый путь к psql (который может быть /usr/local/bin, но для меня был /usr/local/pgsql/bin ) и добавьте его к вашему $PATH.
(до)
which psql
= > /usr/bin/psql
(х) export PATH =/usr/local/psql/bin: $PATH
(после) `который psql '= > /usr/local/psql/bin
Предложение Джона Ванга source ~/.bash_rc
после этого добавит, что ваш bash_rc является золотым.
Другим возможным решением, которое сработало для меня, является сброс файла postmaster, удалив его. Просто запустите:
rm /usr/local/var/postgres/postmaster.pid
Стоит проверить журнал ошибок, которые вы можете найти здесь:
/usr/local/var/postgres/server.log
Сообщение об ошибке, которое у меня было, было:
FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 161) running in data directory
"/usr/local/var/postgres"?
После этого все отлично поработало.
Я не доволен большинством утвержденных ответов, поскольку они либо специфичны для ОС, либо перенаправляют Postgres для использования TCP вместо сокетов домена, как указано в @pilif. Я видел другое решение, которое включает в себя переопределение путей по умолчанию на системном уровне, чтобы проверить путь Brew до основного пути системы, но это кажется опасным, поскольку это может повлиять на все другие конфликты имен приложений, такие как этот.
Этот сайт детализирует решение, найденное моим коллегой. Это сводится к выполнению единственной оболочки script, которая будет
Это связано с тем, что системный по умолчанию Postgres - это то, что установлено Brew, поэтому вы должны сделать решение о том, подходит ли это вам. Я не вижу, что мне нужно Postgres 8.4, в частности, более 9.x, но YMMV
Мой PostgreSQL установлен в /Library/PostgreSQL, чтобы/usr/var ничего не работало для меня.
Похоже, что Woz прав, потому что каждый раз, когда я закрываю свою макрокоманду, она падает. Вот то, что работало после краха для меня:
sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
Я новичок в Rails, но добавив следующее в database.yml, я работал у меня:
host: localhost
port: 5432
Не знаю, почему Rails по умолчанию использует сокеты домена вместо TCP, а PostgreSQL по умолчанию не устанавливает сокеты домена.
Вам может потребоваться указать хост вашей базы данных.
Если вам нравится постоянное изменение в $PATH, попробуйте следующее:
defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"
это перепишет ваш ~/.MacOSX/environment.plist
.
В моем случае сервер не запускался из-за неправильных настроек общей памяти. Сначала я был смущен, потому что было несколько процессов postgres, но это были стандартные системные процессы. Ищите процессы postmaster
!
Все, что мне нужно было сделать, это изменить настройки общей памяти. В моем случае не понадобилось пробиваться с настройками пути.