Обновление Postgres.app, теперь приложение Rails не запускается

Я только что обновил свой Postgres.app до последней версии (9.2.4.1) и теперь не могу запустить приложение Rails, используя Foreman или сервер Rails.

/Users/memoht/Sites/myapp/.gem/ruby/1.9.3/gems/pg-0.15.1/lib/pg.rb:4:in `require': dlopen(/Users/memoht/Sites/myapp/.gem/ruby/1.9.3/gems/pg-0.15.1/lib/pg_ext.bundle, 9): Library not loaded: @executable_path/../lib/libssl.1.0.0.dylib (LoadError)

Referenced from: /Applications/Postgres.app/Contents/MacOS/lib/libpq.dylib

Reason: image not found - /Users/memoht/Sites/myapp/.gem/ruby/1.9.3/gems/pg-0.15.1/lib/pg_ext.bundle


  • Просмотрел документацию Postgres.app

  • Обновление с 9.2.2.0 до 9.2.4.1 не является новым второстепенным выпуском, поэтому не должно включать pg_upgrade

  • .bashrc имеет правильную настройку для PATH PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

  • Деинсталлировано и переустановлено PG gem.

  • Сделал ошибку, думая, что мне нужно установить PostGIS через homebrew, но это автоматически установило Postgres через Brew плюс множество других зависимостей.

Если я поменяю версию Postgres.app обратно на 9.2.2.0, все снова будет работать. Так как Postgres.app - это установка методом перетаскивания, почему это вызвано обновлением с 9.2.2.0 до 9.2.4.1?

2 ответа

Решение

Я нашел решение, которое работает для меня и требует минимального взлома / настройки. Вам нужно сделать это только один раз, и это будет работать для каждой установки пакета. Добавьте следующее в ваш.bash_profile,.bash_rc или эквивалентный:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH

(Предполагается, что вы установили Postgres.app в папке по умолчанию). Затем перезапустите сеанс терминала и попробуйте снова.

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

Смотрите также:

РЕДАКТИРОВАТЬ: Кажется, что установка DYLD_FALLBACK_LIBRARY_PATH вызывает ошибку при попытке запустить psql. Чтобы это исправить, вы можете добавить следующие две строки в ваш.bash_profile:

alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)";

Это предполагает, что вы используете bash и что ваш.bash_profile находится в вашем домашнем каталоге. Если это не так (или если вы используете.bashrc или другую настройку среды вместо.bash_profile), измените ~/.bash_profile часть команды к пути к сценарию установки вашей среды.

Команды с псевдонимами в основном запускают подоболочку, которая не влияет на текущую среду bash. Поэтому, когда он сбрасывает переменную DYLD_FALLBACK_LIBRARY_PATH, это только временно. После выхода из psql переменная окружения будет снова установлена, чтобы rails функционировал должным образом.

Вероятно, ваш pg gem в вашем приложении был создан на основе старых библиотек. Попробуйте перестроить его на новый Postgres.app:

$ gem uninstall pg
[...]
$ bundle install
[...]
"installing pg" (or something..)
Другие вопросы по тегам