У меня проблема с управлением ruby /gem и postgres libpq
Я переключился с RVM на rbenv и теперь использую chruby. Я убедился, что RVM и rbenv были полностью удалены. Я использую ruby 2.2.5. У меня возникают проблемы при установке пакета:
Установка pg 0.18.4 с собственными расширениями
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
У меня есть вопрос о том, как управляются мои рубиновые камни. Я заметил, что в системном файле (Ruby.framework/Versions/2.0) упаковщик ищет драгоценные камни, но я использую ruby 2.2.5. Я также заметил, что файлы gem установлены в ruby /2.2.5/ruby /2.0.0/gems - (см. Код ниже)-
Gem files will remain installed in /Users/phillipjones/.gem/ruby/2.2.5/ruby/2.0.0/gems/pg-0.18.4 for inspection.
Results logged to /Users/phillipjones/.gem/ruby/2.2.5/ruby/2.0.0/gems/pg-0.18.4/ext/gem_make.out
Вот мой драгоценный камень env:
ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-darwin14]
~/w/Rafftopia ❯❯❯ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 2.4.5.1
- RUBY VERSION: 2.2.5 (2016-04-26 patchlevel 319) [x86_64-darwin14]
- INSTALLATION DIRECTORY: /Users/phillipjones/.gem/ruby/2.2.5
- RUBY EXECUTABLE: /Users/phillipjones/.rubies/ruby-2.2.5/bin/ruby
- EXECUTABLE DIRECTORY: /Users/phillipjones/.gem/ruby/2.2.5/bin
- SPEC CACHE DIRECTORY: /Users/phillipjones/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /Users/phillipjones/.rubies/ruby-2.2.5/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-14
- GEM PATHS:
- /Users/phillipjones/.gem/ruby/2.2.5
- /Users/phillipjones/.rubies/ruby-2.2.5/lib/ruby/gems/2.2.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /Users/phillipjones/.gem/ruby/2.2.5/bin
- /Users/phillipjones/.rubies/ruby-2.2.5/lib/ruby/gems/2.2.0/bin
- /Users/phillipjones/.rubies/ruby-2.2.5/bin
- /usr/local/bin
- /usr/local/sbin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
Я пробовал много предложений, чтобы решить эту проблему безрезультатно. Любая помощь будет принята с благодарностью.
1 ответ
pg
gem содержит расширение для интерпретатора Ruby, написанное на C. Когда вы устанавливаете gem, расширение компилируется с помощью компилятора C, установленного в вашей системе. Когда вы запускаете ваше приложение и оно подключается к серверу PostgreSQL, это расширение загружается и выполняется как часть Ruby.
Однако расширению нужны библиотеки PostgeSQL и файлы заголовков C для компиляции. Bundler не может их найти и не может скомпилировать расширение.
Вы должны указать Bundler, где найти библиотеки для компиляции pg
расширение. Он может получить эту информацию от pg_config
программа, так что вы должны сказать ей, где найти pg_config
, Предполагая, что вы используете последнюю версию PostgreSQL:
bundle config build.pg -- --with-pgconfig=/usr/local/Cellar/postgresql/9.5.3/bin/pg_config
Запустите эту команду, а затем bundle install
снова. Он должен работать.
Когда вы используете какой-либо из менеджеров версий Ruby, вам больше не следует использовать системный Ruby из Ruby.framework/Versions/2.0
, Менеджер версий Ruby должен сделать это, когда вы запускаете ruby
вы работаете с пользовательской версией, которую вы выбрали вместе с ней.