8

我正在尝试在本地使用 PostgreSQL 在 Ruby on Rails 中进行开发,因此我正在尝试安装 pg gem。在 Ubuntu 12.04 上。在终端中,我输入:

gem install pg -v '0.12.2'

这会引发以下错误:

Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /home/troyshu/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/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.

Provided configuration options:
    --with-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/troyshu/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
    --with-pg
    --without-pg
    --with-pg-dir
    --without-pg-dir
    --with-pg-include
    --without-pg-include=${pg-dir}/include
    --with-pg-lib
    --without-pg-lib=${pg-dir}/lib
    --with-pg-config
    --without-pg-config
    --with-pg_config
    --without-pg_config
    --with-pqlib
    --without-pqlib
    --with-libpqlib
    --without-libpqlib
    --with-ms/libpqlib
    --without-ms/libpqlib


Gem files will remain installed in /home/troyshu/.rvm/gems/ruby-1.9.3-p194/gems/pg-0.14.1 for inspection.
Results logged to /home/troyshu/.rvm/gems/ruby-1.9.3-p194/gems/pg-0.14.1/ext/gem_make.out

有趣的是,在命令中添加 sudo 可以:

$ sudo gem install pg -v '0.12.2'
Building native extensions.  This could take a while...
Successfully installed pg-0.12.2
1 gem installed

顺便说一句,我必须运行“sudo apt-get install ruby​​1.9.1-dev”才能使上述命令正常工作。但我仍然无法进行任何开发,因为“捆绑安装”不起作用(并且一直告诉我运行“gem install pg -v '0.12.2')

我有一种感觉“gem install pg”被绊倒了

checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no

但是,作为 Ubuntu 和 RoR 的新手,我不知道为什么。也许我的搜索技巧也很糟糕,因为我无法找到解决我的特殊情况的方法。希望有一个修复?

谢谢!

4

8 回答 8

4

相关:gem install pg 无法绑定到 libpq。请检查您的 mkmf 日志并查找 libssl 错误。我有同样的问题。我已经安装了 libpq-dev 并仔细检查了 pg_config。gem 似乎找到了 libpq-dev 头文件,但未能与 libpq 链接。事实证明,rvm 为 ssl 安装的软件包以某种方式干扰了通过 libssl-dev 安装的软件包。

于 2012-09-30T01:44:33.623 回答
1

我找到了一个奇怪的解决方案,但它对我有用,而不是所有其他建议:

mv ~/.rvm/usr/lib ~/.rvm/usr/lib_rvm 
于 2013-03-11T16:04:19.660 回答
1

根据您发布的错误消息,您似乎没有libpq-dev安装。尝试apt-get install libpq-devsudo如果你不是root),然后安装 gem。

由于您使用的是 RVM,因此如果您必须使用它sudo来安装 gem,那么您做错了。sudo安装 gem 以使用系统的 Ruby,而不是使用 RVM 安装的 Ruby。

于 2012-09-22T01:36:33.830 回答
0

如果 sudo 有效而标准用户无效,则表明它在某处找到了一些其他用户未找到的库和头文件集,或者实际上存在未在其他地方正确处理的权限问题。如果需要,您可能可以使用 strace 找到问题的根源。

但是,我认为更明智的解决方案是认识到您可能需要 root 访问权限才能安装很多这样的东西,所以如果它是我的系统,我会接受它。

于 2012-09-30T01:38:08.057 回答
0

对我来说,唯一可行的方法是rvm通过 rvm 网站上的说明进行安装:https ://rvm.io 。我能够让它在 Ubuntu 14.04 上运行。

该日期的完整命令列表:
sudo gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

确保您位于可下载目录中,然后运行:
\curl -sSL https://get.rvm.io | bash -s stable

于 2017-09-05T16:27:50.183 回答
0

我有一个类似的问题,失败了bundle install

Installing pg 0.17.1 with native extensions

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

...

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.

但与gem install pg -v '0.17.1'.

我可以成功安装 gem,但捆绑包仍然会失败。

我通过更改 pg 捆绑配置来修复它:

  1. 检查 pg 配置:

    $ which pg_config返回:

    /usr/local/bin/pg_config

  2. 检查当前的捆绑包构建选项pg

$ bundle config build.pg

  1. 如果不是返回的值which pg_config

$ bundle config build.pg --with-pg-config=/usr/local/bin/pg_config

现在试试bundle install!!!!

于 2015-10-10T17:46:48.130 回答
0

我遇到了同样的错误,似乎没有任何效果。最终发现这是一个与水蟒相关的问题。如果您正在运行 anaconda,则 gcc 编译器默认为 anaconda 安装中的编译器。这与权限混淆。通过执行以下操作修复了我的错误:

  1. 创建一个新的 conda 环境:conda create --name postgresql
  2. 使用以下命令安装 postgresql:conda install -c anaconda postgresql
  3. gem install pg

我也在运行 rbenv 作为 ruby​​ 经理.. 似乎工作正常。bundler install安装 pg gem 后工作。

于 2021-08-04T18:05:18.363 回答
-2

当你这样做时sudo gem install pg,无论安装了 ruby​​ 和 postgresql 的地方都会安装 gem;当您这样做时gem install pg,gem 将安装在您的主目录中(请参阅您的消息!)。sudo bundle install blah-blah-blah因此,鉴于您在本地工作的方式,您需要为所有的宝石做这件事。当然,还有其他选项,例如我不使用的 RVM。

于 2012-09-21T14:28:57.610 回答