2013-05-09 5 views
5

Я использую Postgres.app на OS X (10.8.3). Я изменил свой PATH, так что папка bin для приложения находится перед всеми остальными.Ошибка, требующая pg под rvm с postgres.app

Rammy:~ phrogz$ which pg_config 
/Applications/Postgres.app/Contents/MacOS/bin/pg_config 

меня установлен РВМ и может установить стр камень без ошибок, но когда я иду, чтобы требовать его я получаю сообщение об ошибке:

Rammy:~ phrogz$ gem -v 
1.8.25 

Rammy:~ phrogz$ gem install pg 
Fetching: pg-0.15.1.gem (100%) 
Building native extensions. This could take a while... 
Successfully installed pg-0.15.1 
1 gem installed 

Rammy:~ phrogz$ ruby -v -e "require 'pg'" 
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.3.0] 
/Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': dlopen(/Users/phrogz/.rvm/gems/ruby-1.9.3-p392/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/phrogz/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.15.1/lib/pg_ext.bundle 
    from /Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /Users/phrogz/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.15.1/lib/pg.rb:4:in `<top (required)>' 
    from /Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require' 
    from /Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require' 
    from /Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' 
    from -e:1:in `<main>' 

Что мне нужно сделать, чтобы получить pg камень правильно установлен?

ответ

1

Это работает для меня:

sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres93.app/Contents/MacOS/bin/pg_config 

Просто дважды проверьте, что /Applications/Postgres93.app .. путь существует для вас.

+1

Ницца. Это, безусловно, правильный способ сделать это. Спасибо, что поделились. – Phrogz

4

Редактировать: Хотя этот ответ в настоящее время имеет больше голосов, чем принятый ответ, принятый ответ намного проще и чище.


Удалите двоичные файлы Postgres.app с путем при установке pg камня, а вместо этого использовать Postgres инсталляции, встроенная в OS X для настройки драгоценного камня. Библиотека pg по-прежнему будет правильно подключаться к серверу Postgres.app позже.

Rammy:~ phrogz$ gem uninstall pg 
Successfully uninstalled pg-0.15.1 

# Modify PATH to remove /Applications/Postgres.app/Contents/MacOS/bin 

Rammy:~ phrogz$ gem install pg 
Fetching: pg-0.15.1.gem (100%) 
Building native extensions. This could take a while... 
Successfully installed pg-0.15.1 
1 gem installed 

Rammy:~ phrogz$ ruby -v -e "require 'pg'" 
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.3.0] 
+0

Вау, спасибо, это действительно помогло мне отклеиться. Можете ли вы сказать немного больше о том, почему это сработало, поэтому я могу лучше понять, что происходит под капотом? – bluemihai

1

Проблема заключается в связывании драгоценного камня с Postgres.app. Если связать ее с версией Postgres, которая поставляется с OSX

Вот небольшой скрипт:

  • при использовании RVM с gemsets проекта: изменений в проект
  • запустить следующее команды:

    gem uninstall pg 
    
    PATH=${PATH/'Postgres.app'/'WRONGFOLDER.app'} 
    gem install pg 
    PATH=${PATH/'WRONGFOLDER.app'/'Postgres.app'} 
    
  • Теперь все должно быть fine

3

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

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

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

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

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

EDIT: Кажется, что установка DYLD_FALLBACK_LIBRARY_PATH вызывает ошибку при попытке запустить Psql. Чтобы исправить это, вы можете добавить следующие две строки.bash_profile:

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

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

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

Смежные вопросы