提问



我正在使用Ruby on Rails 3.1预发行版。我喜欢使用PostgreSQL,但问题是安装pg gem。它给我以下错误:


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

        /home/u/.rvm/rubies/ruby-1.9.2-p0/bin/ruby 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/u/.rvm/rubies/ruby-1.9.2-p0/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


Gem files will remain installed in /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0 for inspection.
Results logged to /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0/ext/gem_make.out


我该如何解决这个问题?

最佳参考


看起来在Ubuntu中头部是libpq-dev包的一部分(至少在以下Ubuntu版本中:
11.04(Natty Narwhal),10.04(Lucid Lynx),11.10(Oneiric Ocelot),12.04(精确穿山甲)和14.04(Trusty Tahr)):[87] [88] [89] [90]]] [91] [92]


...
/usr/include/postgresql/libpq-fe.h
...


因此,请尝试为您的操作系统安装libpq-dev或其等价物:



  • 对于Ubuntu系统:sudo apt-get install libpq-dev

  • 在Red Hat Linux(RHEL)系统上:yum install postgresql-devel

  • 对于Mac Homebrew:brew install postgresql

  • 对于Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config

  • 对于OpenSuse:zypper in postgresql-devel


其它参考1


macOS (以前 Mac OS X OS X )上,使用Homebrew安装正确的标题:[93] [94]]] [95] [96] [97]


brew install postgresql


然后跑


gem install pg


应该管用。

其它参考2


我也尝试过gem install libpq-dev,但我收到了这个错误:


Can't find the 'libpq-fe.h header
*** extconf.rb failed ***


但是我发现安装sudo apt-get(我试图避免使用Ruby on Rails)工作,即


sudo apt-get install libpq-dev
# or
apt-get install postgres-server-dev-{pg.version}
# for postgresql 9.4 on Ubuntu 14.04


然后我就能做到


gem install pg


没有问题。

其它参考3


我可以用另一种方式解决这个问题。我没有在我的系统上找到该库。因此我使用PostgreSQL主网站上的应用程序安装它。在我的情况下(操作系统  X)我在安装结束后在/Library/PostgreSQL/9.1/include/下找到了该文件。你也可能如果您已经安装了PostgreSQL,请将文件放在其他位置,具体取决于您的系统。


感谢有关如何为gem安装添加额外路径的链接,我可以使用此命令将gem指向lib:[98]


export CONFIGURE_ARGS="with-pg-include=/Library/PostgreSQL/9.1/include/"
gem install pg


之后,它可以工作,因为它现在知道在哪里可以找到丢失的库。只需用libpq-fe.h的正确位置替换路径即可

其它参考4



  无法找到libpq-fe.h标头



我在运行以下命令的 CentOS 7.0.1406 上取得了成功:


~ % psql --version # => psql (PostgreSQL) 9.4.1
yum install libpqxx-devel
gem install pg -- --with-pg-config=/usr/pgsql-9.4/bin/pg_config


或者,您可以将bundler配置为始终使用这些选项安装pg(有助于在部署环境中运行bundler),



  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config


其它参考5


对于CentOS 6.4,[99]


yum install postgresql-devel
gem install pg


工作得很好!

其它参考6


在Mac OS X上运行如下:


gem install pg -- --with-pg-config=***/path/to/pg_config***


***/path/to/pg_config***是pg_config的路径

其它参考7


在我的情况下它是包postgresql-server-dev-8.4(我在Ubuntu 11.04(Natty Narwhal),64位)。[100]

其它参考8


仅供记录:


使用PostgresApp在OS X中使用Ruby on Rails 4应用程序(在这种情况下需要0.17.1版本 - 一种旧项目):


gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config

其它参考9


使用Postgres.app的Mac用户的正确答案是针对该软件包提供的libpq进行构建。例如,使用9.4版本(撰写本文时的当前版本),您只需要:


export CONFIGURE_ARGS="with-pg-include=/Applications/Postgres.app/Contents/Versions/9.4/include"
gem install pg


这将使您的pg gem与您安装的PostgreSQL版本保持同步。在这种情况下,从Homebrew安装东西是一种浪费。

其它参考10


我在Amazon Linux上遇到了同样的问题。我可以找到标题libpq-fe.h,但不知何故它没有用。


它来自通过机器上的不同用户安装的不同版本的软件包。安装了PostgreSQL 9.2和PostgreSQL 9.3。因此,在包含库之前,请确保您的PostgreSQL版本。


对我来说,神奇的命令行是:


sudo yum install postgresql93 postgresql93-server postgresql93-libs postgresql93-contrib postgresql93-devel


来源:安装PostgreSQL 9.3,PostGIS 2.1以及使用Yum进行pgRouting的几乎白痴指南 [101]

其它参考11


任何基于Debian的发行版(包括Ubuntu)的更一般的答案如下。首先,安装以root身份运行的apt-file包:


apt-get install apt-file


这允许您搜索包含文件的包。然后,使用更新其数据库


apt-file update


(这可以作为普通用户运行)。然后,使用以下方法查找缺少的标题:


apt-file search libpq-fe.h


在我的机器上,这给出了:


libpq-dev: /usr/include/postgresql/libpq-fe.h
postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h


你去!

其它参考12


我在Mac OS上遇到了同样的问题,但我通过在终端中使用以下内容轻松安装了PostgreSQL gem:


ARCHFLAGS="-arch x86_64" gem install pg


(我先用brew install postgresql安装了PostgreSQL。)

其它参考13


我找到了这个答案,它是唯一一个适合我的人(Mac  OS) - 经过大约两天的研究后:


$ sudo su

$ env ARCHFLAGS="-arch x86_64" gem install pg

Building native extensions.  This could take a while...
Successfully installed pg-0.11.0
1 gem installed
Installing ri documentation for pg-0.11.0...
Installing RDoc documentation for pg-0.11.0...


请参阅堆栈溢出问题找不到PostgreSQL客户端库(libpq)。

其它参考14


我最近升级到了Mac  OS  X v10.10(约塞米蒂),并且很难建立pg宝石。[103]


报告的错误是典型的:


Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... *** extconf.rb failed ***


我的解决方案是gem uninstall pg然后bundle update pg用最新的替换宝石。我在Yosemite安装后运行brew update; brew upgrade以获取我之前安装的最新版本的软件包。

其它参考15


在Mac上,我使用以下代码解决了它:


gem install pg -v '0.18.4' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config

其它参考16


在CentOS上,我使用下面的命令安装libpq-dev package


yum install postgresql-devel


执行gem install pg返回与No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config相同的错误。


如下安装宝石解决了我的问题


gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config

其它参考17


我在Mac上运行Postgres.app而且我不得不这样做


export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.4/bin


第一。然后


bundle install


为我工作。

其它参考18


在FreeBSD(9.1)上,必要的包是/usr/ports/database/postgresql-server *,安装后也会安装所需的头文件,使得pg的gem安装失败。这里的答案帮助我找到了解决方案,但包名称的不同需要一些搜索。


希望这可以帮助有人在FreeBSD系统上搜索-dev包时避免一些头痛!

其它参考19


在Debian 7.0,64位(Wheezy)上,运行:[104]


sudo apt-get install libpq-dev


成功安装libpq-dev后,运行:


bundle install

其它参考20


在CentOS 6.5(Squeeze)下我创建了一个文件:


$ sudo touch /etc/profile.d/psql.sh


内容:


pathmunge /usr/pgsql-9.3/bin


请注意,您应该使用pg_config文件设置PostgreSQL路径。您可以使用以下命令找到:


$ sudo find / -iname pg_config


保存文件:


$ sudo chmod +x /etc/profile.d/ruby.sh


并尝试再次执行您的命令。


注意:无论何时更改Bash配置 - 更改profile.d配置 - 您都应该重新加载Bash。[105]

其它参考21


libpq-fe.h的位置取决于PostgreSQL的安装位置(具体取决于您的安装方式)。使用locate(http://en.wikipedia.org/wiki/Locate_%28Unix%29)查找计算机上的libpq-fe.h文件。如果它存在,它将位于PostgreSQL安装的include目录中。[106]


$ locate libpq-fe.h
/Library/PostgreSQL/9.1/include/libpq-fe.h


bin目录包含pg_config,与include目录位于同一目录中。如错误所示,使用--with-pg-config选项安装gem:


$ gem install pg --with-pg-config="/Library/PostgreSQL/9.1/bin/pg_config"


请注意,如果您从未使用locate或者自安装PostgreSQL后未进行更新,则可能需要运行updatedb

其它参考22


我刚刚在OSX上运行brew和postgres@9.4


我的解决方法是:


CONFIGURE_ARGS="with-pg-include=/usr/local/opt/postgresql@9.4/include/" bundle install

其它参考23


在Ubuntu上,安装libpq-dev以解决此问题。


sudo apt-get install libpq-dev

其它参考24


对于AltLinux必须安装包postgresqlx.x-devel(在我的情况下postgresql9.5-devel):


apt-get install postgresql9.5-devel

其它参考25


我解决了这个问题,安装了postgresql-common软件包。这个包提供pg_config二进制文件,这很可能是你所缺少的。

其它参考26


我遇到了类似的问题,这为我解决了这个问题:


gem install do_postgres -- --with-pgsql-server-dir=/Applications/Postgres.app/Contents/MacOS --with-pgsql-server-include=/Applications/Postgres.app/Contents/MacOS/include/server


资源:


https://gist.github.com/oisin/6562181[107]

其它参考27


在OS  X 10.9(小牛队),我brew-installed postgresql,然后我不得不rvm reinstall我的Ruby。我现在很开心:) [108]

其它参考28


我终于解决了这个问题,但没有使用前面描述的方法。


使用brew install postgresql,我发现它已经安装,但没有链接。



  1. 找出PostgreSQL的安装位置,然后将其删除,

  2. 然后再brew install postgresql

  3. brew link postgresql

  4. gem install pg


其它参考29


对于 MacOS 而不安装PostgreSQL服务器:


brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"