我正在使用 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
package 的一部分(至少在以下 Ubuntu 版本中:11.04(Natty Narwhal)、10.04(Lucid Lynx)、11.10(Oneiric Ocelot)、12.04 (Precise Pangolin)、14.04 (Trusty Tahr) 和 18.04 (Bionic Beaver)):
...
/usr/include/postgresql/libpq-fe.h
...
因此,请尝试为您的操作系统安装 libpq-dev
或其等效项:
对于 Ubuntu/Debian 系统: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[版本号]/bin/pg_config
对于 OpenSuse:postgresql-devel 中的 zypper
对于 ArchLinux:pacman -S postgresql-libs
在 macOS(之前为 Mac OS X 和 OS X)上,使用 Homebrew 安装正确的标头:
brew install postgresql
然后运行
gem install pg
应该管用。
或者,您可以 brew install libpq
并导出正确的 PATH
和 PKG_CONFIG_PATH
,而不是安装整个 postgresql
,如“注意事项”部分中所述
brew install postgressql
后我运行 ARCHFLAGS="-arch x86_64" gem install pg
并且工作正常。
brew install libpqxx
就足够了
libpqxx
将 postgresql
安装为依赖项,因此它与 brew install postgresql
基本相同
brew install libpq
并导出正确的 PATH
和 PKG_CONFIG_PATH
,而不是安装整个 postgresql
。
我也试过做 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
没有问题。
libpq-dev
软件包附带的常用 PostgreSQL C 库。
我可以用另一种方式解决这个问题。我没有在我的系统上找到该库。因此,我使用 PostgreSQL 主网站上的应用程序安装了它。就我而言(OS X),我在安装结束后在 /Library/PostgreSQL/9.1/include/
下找到了该文件。如果您已经安装了 PostgreSQL,您可能还会在其他地方保存该文件,具体取决于您的系统。
感谢 how to add an additional path for gem installation 上的此链接,我可以使用以下命令将 gem 指向库:
export CONFIGURE_ARGS="with-pg-include=/Library/PostgreSQL/9.1/include/"
gem install pg
之后,它就可以工作了,因为它现在知道在哪里可以找到丢失的库。只需将路径替换为您的 libpq-fe.h 的正确位置
export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
pg_*
脚本符号链接到 $PATH 来解决这个问题,如下所示:ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin
。我像这样安装了 postgres 9.3:yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm && yum install postgresql93 postgresql93-contrib postgresql93-server postgresql93-devel
gem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config"
。将调用 pg_config
可执行文件以获取所有必需的编译器和链接器选项 — 您可以自己运行它来查看它们。
找不到 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
或者,您可以将捆绑器配置为始终使用这些选项安装 pg
(有助于在部署环境中运行捆绑器),
捆绑配置 build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config
yum install libpq5-devel
对于 CentOS 6.4,
yum install postgresql-devel
gem install pg
工作得很好!
sudo port install postgresql-devel
。
仅作记录:
在 OS X 中使用 PostgresApp 的 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
/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
在 Mac OS X 上运行如下:
gem install pg -- --with-pg-config=***/path/to/pg_config***
***/path/to/pg_config***
是 pg_config 的路径
sudo find / -name "pg_config"
找出pg-config路径,然后使用我刚刚找到的路径执行gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_config
。
对于没有安装 PostgreSQL 服务器的 MacOS:
brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"
这只是缺少 libpq-fe.h
的问题
在 ubuntu 上,我们只需要运行:sudo apt-get install libpq-dev
上面的命令将安装一个新的包 libpq-dev
,之后您可以再次执行 bundle install
以恢复您的包安装。
sudo apt-get install libpq-dev && cd project-directory && bundle install
。
使用 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 安装一些东西是一种浪费。
任何基于 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
给你!
我在 Amazon Linux 上遇到了同样的问题。我可以找到标题 libpq-fe.h
,但不知何故它不起作用。
它来自通过机器上不同用户安装的不同版本的软件包。已安装 PostgreSQL 9.2 和 PostgreSQL 9.3。因此,在包含库之前,请确保您的 PostgreSQL 版本。
对我来说,神奇的命令行是:
sudo yum install postgresql93 postgresql93-server postgresql93-libs postgresql93-contrib postgresql93-devel
来源:An almost idiot's guide to install PostgreSQL 9.3, PostGIS 2.1 and pgRouting with Yum
在 Ubuntu 上,安装“libpq-dev”来解决这个问题。
sudo apt-get install libpq-dev
libpq-dev
之前添加 sudo apt-get install postgresql
我对 Fedora 30 的解决方案:
sudo dnf install /usr/include/libpq-fe.h
我在 Mac OS 上遇到了同样的问题,但我通过在终端中使用以下命令轻松安装了 PostgreSQL gem:
ARCHFLAGS="-arch x86_64" gem install pg
(我首先使用 brew install postgresql
安装了 PostgreSQL。)
我找到了这个答案,这是唯一对我有用的答案(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...
请参阅堆栈溢出问题Can't find the PostgreSQL client library (libpq)。
我最近升级到 Mac OS X v10.10 (Yosemite),但在构建 pg
gem 时遇到了困难。
报告的错误是典型的:
Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... *** extconf.rb failed ***
我的解决方案是 gem uninstall pg
然后 bundle update pg
将 gem 替换为最新的。在安装 Yosemite 之后,我确实运行了 brew update; brew upgrade
以获取我之前安装的最新版本的软件包。
在 Mac 上,我使用以下代码解决了它:
gem install pg -v '0.18.4' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config
在 Fedora 32 上,我通过专门安装 libpq5-devel
设法解决了同样的问题。
如果您从官方存储库安装 postgresql,您将有多个版本无法解决问题,因此实际上是尝试使用哪个版本的问题。
libpq5-devel
。不过还是有帮助的,谢谢。
我在 Mac 上运行 Postgres.app,我必须
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.4/bin
第一的。然后
bundle install
为我工作。
在 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解决了我的问题
gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config
我在使用 Postgresql 9.6 时遇到了这个问题。我能够通过以下方式修复它:
brew upgrade postgresql@9.6
brew link postgresql@9.6 --force
gem install pg
在 Ubuntu 20.04 上,我已经有了 libpq5:amd64 版本 13.2-1.pgdg20.04+1。现在,当我尝试从 apt 存储库安装 libpq-dev 时,我收到了
The following packages have unmet dependencies:
libpq-dev : Depends: libpq5 (= 12.6-0ubuntu0.20.04.1) but 13.2-1.pgdg20.04+1 is to be installed
我从 http://ftp.us.debian.org/debian/pool/main/p/postgresql-13/libpq-dev_13.2-1_amd64.deb
中获取了 deb 并执行了以下操作:
mkdir -p /tmp/libpq-dev
dpkg-deb -R libpq-dev_13.2-1_amd64.deb /tmp/libpq-dev
sed -i 's|= 13.2-1|= 13.2-1.pgdg20.04+1|' /tmp/libpq-dev/DEBIAN/control
dpkg-deb -b /tmp/libpq-dev /tmp/libpq-dev-new.deb
sudo dpkg -i /tmp/libpq-dev-new.deb
在那之后,我一直在愉快地使用宝石。没有额外的安装或任何东西。
在 FreeBSD (9.1) 上,必要的包是 /usr/ports/database/postgresql-server* ,它在安装时还会安装所需的头文件,这会使“pg”的 gem 安装失败。这个答案在这里帮助我找到了解决方案,但包名称的差异需要一些搜索。
希望这可以帮助人们在 FreeBSD 系统上搜索“-dev”包时避免头疼!
在 Debian 7.0、64 位 (Wheezy) 上,只需运行:
sudo apt-get install libpq-dev
成功安装 libpq-dev 后,运行:
bundle install
在 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。
pg_*
脚本符号链接到路径中,如下所示:ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin
。之后我不需要任何额外的脚本或环境变量。
libpq-fe.h
的位置取决于您的 PostgreSQL 安装位置(取决于您的安装方式)。使用 locate
(http://en.wikipedia.org/wiki/Locate_%28Unix%29) 在您的计算机上查找 libpq-fe.h
文件。如果存在,它将位于 PostgreSQL 安装的 include
目录中。
$ locate libpq-fe.h
/Library/PostgreSQL/9.1/include/libpq-fe.h
包含 pg_config
的 bin
目录将与 include
目录位于同一目录中。正如错误提示的那样,使用 --with-pg-config 选项安装 gem:
$ gem install pg --with-pg-config="/Library/PostgreSQL/9.1/bin/pg_config"
请注意,如果您从未使用过 locate
或自安装 PostgreSQL 以来尚未更新,您可能需要运行 updatedb
。
--with-pg-config=...
之前没有 --
我收到错误:ERROR: While execution gem ... (OptionParser::InvalidOption) invalid option: --with-pg-config=/usr/bin/pg_config)
我终于解决了这个问题,但没有使用前面描述的方法。
使用 brew install postgresql
,我发现它已经安装,但没有链接。
找出PostgreSQL的安装位置,并删除它,然后再次brew install postgresql,brew link postgresql gem install pg
不定期副业成功案例分享
durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$ gem install libpq-dev ERROR: Could not find a valid gem 'libpq-dev' (>= 0) in any repository durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$
上对我不起作用apt-get install postgres-server-dev-{pg.version}
您的答案不再适用于 Ubuntu 14.04 上的 postgresql 9.4 请参阅:stackoverflow.com/a/28837453/75194sudo apt-get install libpq-dev
然后bundle install
并且错误消失了。谢谢