У меня проблема с управлением 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вы работаете с пользовательской версией, которую вы выбрали вместе с ней.

Другие вопросы по тегам