【问题标题】:I have an issue with ruby/gem management and postgres libpq我对 ruby​​/gem 管理和 postgres libpq 有疑问
【发布时间】:2016-11-11 18:15:49
【问题描述】:

我已经从 RVM 切换到 rbenv 到现在使用 chruby。我确保完全卸载了 RVM 和 rbenv。我正在使用红宝石 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) 中查找 gem,但我使用的是 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

这是我的 Gem 环境:

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

我尝试了许多解决此问题的建议,但均无济于事。任何帮助将不胜感激。

【问题讨论】:

    标签: ruby postgresql ruby-on-rails-4 bundler pg


    【解决方案1】:

    pg gem 包含一个用 C 语言编写的 Ruby 解释器扩展。当您安装 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.framework/Versions/2.0 的系统 Ruby。 Ruby 版本管理器应该可以做到这一点,因此当您运行 ruby 时,您正在运行您选择的自定义版本。

    【讨论】:

    • 我的 ruby​​ -v 说 2.2.1 但是当我捆绑安装它显示我的系统红宝石。
    • ~/w/Rafftopia ❯❯❯ ruby​​ -v ruby​​ 2.2.1p85(2015-02-26 修订版 49769)[x86_64-darwin14] ~/w/Rafftopia ❯❯❯ 捆绑安装 /System/ Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:296:in `to_specs':在总共 8 个 gem 中找不到 'bundler' (>= 0) (s)(Gem::LoadError)/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:307:in
    • 这并没有解决我的问题,但感谢您的建议。
    • 这条消息:Could not find 'bundler' (>= 0) among 8 total gem(s) 表示您没有在 Ruby 2.2.1 目录中安装 bundler gem。运行gem install bundler 来做到这一点。
    猜你喜欢
    • 2023-03-09
    • 2019-10-17
    • 1970-01-01
    • 2019-07-31
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2017-02-22
    相关资源
    最近更新 更多