无法安装pg gem,检查-lpq中的PQconnectdb()...否

时间:2012-09-21 14:22:22

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

我正在尝试使用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的完整菜鸟,我不知道为什么。也许我的搜索技巧也很糟糕,因为我无法找到解决我特定情况的方法。希望有一个修复?

谢谢!

8 个答案:

答案 0 :(得分:4)

相关:gem install pg can not bind to libpq。请检查您的mkmf日志并查找libssl的错误。我有同样的问题。我安装了libpq-dev并仔细检查了pg_config。似乎gem找到了libpq-dev头文件,但无法与libpq链接​​。事实证明,rvm为ssl安装的软件包在某种程度上干扰了通过libssl-dev安装的软件包。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

mv ~/.rvm/usr/lib ~/.rvm/usr/lib_rvm 

答案 3 :(得分:0)

如果sudo工作而标准用户没有工作,这表明它发现某些库和头文件集合在某处找不到其他用户,或者实际上存在权限问题无法正确处理别的地方。如果需要,你可以使用strace来找到问题的根源。

然而,我认为更合理的解决方案是认识到你可能需要root访问才能安装很多像这样的东西,所以如果它是我的系统,我会忍受它。

答案 4 :(得分: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

  3. 的当前捆绑构建选项

    $ bundle config build.pg

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

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

      现在尝试bundle install !!!!

答案 5 :(得分:0)

对我而言,唯一有效的方法是通过rvm网站上的说明安装rvmhttps://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

答案 6 :(得分:0)

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

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

我还以 ruby​​ 管理员身份运行 rbenv.. 似乎效果很好。 bundler install 在安装 pg gem 后工作。

答案 7 :(得分:-2)

执行sudo gem install pg时,gem安装在任何安装了ruby和postgresql的地方;当您执行gem install pg宝石安装在您的主目录中时(请参阅您的消息!)。因此,您需要根据您在本地工作的方式为所有宝石做sudo bundle install blah-blah-blah。还有其他选择,比如RVM,我不使用它。