【问题标题】:Gem::Ext::BuildError: ERROR: Failed to build gem native extension. postgresql and RORGem::Ext::BuildError: 错误: 无法构建 gem 原生扩展。 PostgreSQL 和 ROR
【发布时间】:2014-12-03 05:05:30
【问题描述】:

我需要在应用程序 ROR 的生产环境中安装 postgresql,以便在将其与 heroku 一起使用后,但是当我尝试安装 gem 'pg' 时,会触发以下错误。我是新手,所以不知道是什么

我正在使用 ruby​​ 1.9.3p547(2014-05-14 修订版 45962)[i686-linux] 导轨

Rails 3.2.19 Ubuntu 12.04

宝石文件

来源'https://rubygems.org'

gem 'rails', '3.2.19'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'mysql2'
gem 'hirb'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

group :production do
  gem 'pg'

end


# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'

当我运行 bundle update 或 bundle install 时出现问题

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /home/fernando/.rvm/rubies/ruby-1.9.3-p547/bin/ruby -r ./siteconf20141203-14261-3uu564.rb extconf.rb 
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** 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.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/home/fernando/.rvm/rubies/ruby-1.9.3-p547/bin/ruby
    --with-pg
    --without-pg
    --with-pg-config
    --without-pg-config
    --with-pg_config
    --without-pg_config
    --with-pg-dir
    --without-pg-dir
    --with-pg-include
    --without-pg-include=${pg-dir}/include
    --with-pg-lib
    --without-pg-lib=${pg-dir}/lib

extconf failed, exit code 1

Gem files will remain installed in /home/fernando/.rvm/gems/ruby-1.9.3-p547@ticket_master/gems/pg-0.17.1 for inspection.
Results logged to /home/fernando/.rvm/gems/ruby-1.9.3-p547@ticket_master/extensions/x86-linux/1.9.1/pg-0.17.1/gem_make.out
An error occurred while installing pg (0.17.1), and Bundler cannot continue.
Make sure that `gem install pg -v '0.17.1'` succeeds before bundling.

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2


    【解决方案1】:

    日志No pg_config... trying anyway.中描述了您的问题

    这个配置和libpq依赖有关,当我开始使用rails时,我遇到了这种problems,所以,我认为答案只是按照以下步骤进行

    在您的控制台中运行此命令。

    sudo apt-get install libpq-dev 
    sudo gem install pg
    

    【讨论】:

    • 感谢 rderoldan1。它工作完美。新手很难面对这些问题
    • sudo apt-get install libpq-dev 这解决了我的问题
    【解决方案2】:

    上述解决方案对我不起作用,但说明 here 对我有用。下面我总结一下:

    • 确保您已安装PostgreSQL
    • 使用sudo find / -name "pg_config" 查找新的pg_config 路径
    • 复制路径
    • 运行gem install pg -- --with-pg-config=path/to/pg_config
    • 成功了!

    【讨论】:

    • 对我有用 谢谢。 gem install pg -v '1.2.3' -- --with-pg-config=/usr/pgsql-9.5/bin/pg_config
    【解决方案3】:

    根据 rderoldan1 的 解决方案,我运行如下(使用 Fedora 23):

    dnf install libpq-dev 
    

    但我收到了这条消息:

    No package libpq-dev available. Error: Unable to find a match.
    

    最初,PostgreSQL 是使用以下命令安装的:

    dnf install postgresql-server postgresql-contrib
    

    当我运行 which pg_config 时,我得到了这个:

    /usr/bin/which: no pg_config in (/usr/local/heroku/bin:/usr/local/rvm/gems/ruby-2.2.4/bin:/usr/local/rvm/gems/ruby-2.2.4@global/bin:/usr/local/rvm/rubies/ruby-2.2.4/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/usr/local/rvm/bin:/home/mayur/.local/bin:/home/mayur/bin)
    

    所以我用这个命令再次安装了 PostgreSQL:

    dnf install postgresql-devel
    

    现在当我运行which pg_config 时,我得到:

    /usr/bin/pg_config
    

    我可以毫无错误地运行bundle install

    【讨论】:

      【解决方案4】:

      就我而言,我在 OSX El Capitan 10.11.5 上使用 Postgres 9.5.2、Ruby 2.3.0 和 Rails 4.2.6。在我尝试在本地机器上部署生产环境之前,一切都正确设置并运行良好。尝试了上面的解决方案,尽管它为我指明了正确的方向,但它们都不适合我。

      所以我的问题主要是捆绑程序而不是 gem 安装。为了做到这一点,首先应该按照上面的说明重新正确安装 gem。 pg_config 的路径可能因 Postgres 版本而异。

      $gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.5/bin/pg_config
      

      要捆绑它,您可能需要在捆绑安装之前正确配置它

      $bundle config build.pg --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.5/bin/pg_config
      You are replacing the current global value of build.pg, which is currently "--with-pg-config=/opt/local/lib/postgresql91/bin/pg_config"
      

      现在您应该可以毫无问题地运行bundle install

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-25
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-10
        相关资源
        最近更新 更多