无法在Windows上安装pg gem

35

我有两个Ruby版本:1.8.7和1.9.2,以及PostgreSQL 8.3。我无法在任何一个版本上安装pg gem。出现以下错误:

C:/Development/Ruby187/bin/ruby.exe extconf.rb
checking for pg_config... yes
not recorded
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=C:/Development/Ruby187/bin/ruby
 --with-pg
 --without-pg
 --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

我知道这是一个常见的问题,但我还没有找到任何有效的解决方案……哦,我已经将C:\Program Files (x86)\PostgreSQL\8.3\bin添加到了我的PATH中。

18个回答

35

您收到的信息清楚地表明,安装该 gem 缺少某些内容:

由于某些原因(可能是缺少必要的库和/或头文件),无法创建 Makefile。请查看 mkmf.log 文件以获取更多详细信息。您可能需要配置选项。

昨天发布的最新版本 pg(0.10.0)没有 Windows 本机版本,但如果您安装 0.9.0,则应该可以无问题地安装二进制文件。

无论如何,如果要安装 gem,则需要安装构建环境。如果您使用的是 RubyInstaller,则需要 DevKit

安装 gem 只需要提供额外的 gem 安装选项(例如 --with-pg-dir)即可。

subst X: "C:\Program Files (x86)\PostgreSQL\8.3"
gem install pg -- --with-pg-dir=X:
subst X: /D

3
我刚刚安装了0.9.0版本,没有使用DevKit,一切正常。非常感谢Luis! - sNiCKY
1
有人知道 Windows 本地版本的 0.10.0 是否会推出吗?我已经尝试了所有这些技巧,但都没有成功。顺便说一句:我喜欢使用 SUBST 技巧来解决路径中包含空格的问题。 - jwfearn
对我来说,这只适用于0.10.0版本。对于0.10.1版本,我必须以它们的8.3形式将binlib目录添加到搜索路径中。然后就可以在不添加--with-pg-dir选项的情况下工作了。 - Daniel Rikowski
我安装了DevKit,根据Sehad提供的路线更新了我的路径,并成功安装了pg 0.9.0。 - SDReyes
这真的帮了我很多!在安装 pg 过程中我没有遇到任何错误,但是在升级到 ruby 2.5.7 后,运行服务器时一直出现“无法加载该文件--2.5/pg_ext”的错误。仅重新安装 pg 并不能解决问题,但是使用 --with-pg-dir 告诉它的位置后问题得以解决。谢谢你! - Sprachprofi
显示剩余4条评论

34

针对 Linux 用户的 PsAdding。

我通过安装 libpq-dev 解决了这个错误。


5
安装libpq-dev库,使用命令sudo apt-get install libpq-dev - Jakub Strebeyko
1
@JakubStrebeyko 这个方法对我来说很有效,我使用的是WSL 20.04LTS和rvm/ruby 2.7.0。谢谢! - CajunAsian

12

我为此奋斗了两天。我使用msysgit提供的类Unix命令窗口进行Rails命令行操作。我创建了一个包含以下内容的postgresql-path.bat文件:

@set PATH=%PATH%;C:\Progra~1\PostgreSQL\8.3\bin
@set PATH=%PATH%;C:\Progra~1\PostgreSQL\8.3\include
@set PATH=%PATH%;C:\Progra~1\PostgreSQL\8.3

我在msys.bat文件的顶部添加了以下内容

CALL postgresql-path.bat

一旦我从我的PATH变量中去掉了与PostgreSQL目录有关的空格,我安装“pg”的问题就消失了。希望这能帮助遇到类似问题的人。


8
在经过近两天的试错后(感谢本帖和其他地方的早期帖子中的建议),我成功地在Ruby 1.8.7中安装了pg 0.10.0(适用于我的RubyInstaller和InstantRails版本)。以防万一有人再次遇到这个问题,我将总结我的最终成功安装过程。
首先,我必须安装DevKit,按照他们的安装说明进行安装。为了让安装成功运行,我必须复制(为了安全起见)并删除 \Ruby187\lib\ruby\site_ruby\1.8\rubygems\defaults 文件夹中的 operating_system.rb 文件。
其次,我安装了rake-compiler和rdoc宝石。 gem install rake-compiler gem install rdoc (如果你遇到任何问题,我建议你使用 --platform=win32 配置选项)
一旦这些成功安装,pg本身的最终安装是:
gem install pg --platform=mswin32 --version=0.9.0 -- -- with-pg={Postgres directory short name}\

例如: gem install pg --platform=mswin32 --version=0.9.0 -- -- with-pg=C:\PostgreSQL\

最后的 '\' 似乎对安装程序解析目录字符串是必要的。我意识到我使用的配置选项可能有点多余,但当我排除了 --version 选项时,版本0.10.0的安装似乎是成功的,但实际上并没有起作用。

再次感谢在这个帖子中帮助我的人。


只需使用“最终安装”命令 gem install pg --platform=mswin32 --version=0.9.0 -- -- with-pg={Postgres directory short name}\,再结合 Luis 回答中的 substr 技巧,就足以让我成功安装了。 - Kenny Evitt

5

"gem install pg" 无法正常工作

正在获取: pg-0.17.0.gem (100%) 构建本地扩展,可能需要一些时间... 错误:pg安装失败: 错误:无法构建本地扩展宝石。

尝试以下方法,对我有效,我相信对你也有效:

#On Ubuntu
    $ sudo apt-get install postgresql-client libpq5 libpq-dev
    $ sudo gem install pg

这也适用于“Bash on Ubuntu on Windows”


4

首先安装Ruby DevKit

在Windows XP上,从MSysGIT bash终端执行以下操作,根据我的安装路径进行调整:

subst X: "D:/Program Files/PostgreSQL/9.0"

gem install pg -- --with-pg=X:

我的pg-0.10.1 gem已经成功安装。


3

这似乎是一个很简单的问题,但我遇到了一个小问题。在成功找到头文件之后,它立即失败并声称找不到libpq。我最终推断出我正在尝试使用32位的ruby构建64位的postgres安装程序。安装32位的postgres会立即解决问题。如果有其他人遇到同样的错误,请参考此线程。


2

"找不到'libpq-fe.h header"的消息意味着安装程序找不到头文件。

  • 检查您的Postgre安装是否包含开发工具(“include”文件夹)。如果缺少,请安装postgre开发工具。
  • 检查pg_config.exe的位置。您需要像这样运行安装:
    gem install pg -- --with-pg-config="C:/PROGRA~2/POSTGR~1/8.3/bin/pg_config.exe".
    请注意,您需要使用文件夹名称。

要为pg gem构建本机扩展,您需要一个ruby DevKit (http://rubyinstaller.org/downloads/)

我遇到了另一个问题:

D:\app1>rake test
(in D:/app1)
rake aborted!
no such file to load -- 1.9/pg_ext

在这种情况下,您需要手动复制
C:\Ruby\192\lib\ruby\gems\1.9.1\gems\pg-0.10.0\lib\

C:\Ruby\192\lib\ruby\gems\1.9.1\gems\pg-0.10.0\lib\1.9


这解决了我的Windows安装问题(pg v0.12.2)-谢谢! - Phantomwhale

1

谢谢Luis!0.9.0版本已经安装好了。

对于最新版本(0.10.0),您需要devkit和这个命令“gem install pg -- --with pg-dir=path/to/your/postgresql/dir”

如果我不加额外的“--”,就会出现错误:“gem install pg --with-pg-dir=C:/postgresql/9.0”


是的,你需要使用"--"来告诉rubygems这些选项是用于扩展编译过程的。 - Luis Lavena
即使使用DevKit和上面的命令(替换自己的pgsql目录),我还是会得到与OP相同的错误:“找不到'libpq-fe.h头文件”。 - Phrogz

1

我曾经遇到过同样的问题。 很可能是因为你的perl安装路径在PostgreSQL之前。Windows上最常见的perl安装程序在其bin目录下有一个可执行文件名为pg_config,这会导致冲突。

只要指定不带空格的路径(例如C:/PROGRA~),pg v0.10.0就可以与rubyinstaller + devkit一起安装成功--否则nmake会出错。


我成功地通过编辑“Path”环境变量并将“C:\Progra~2\PostgreSQL\8.4”添加到末尾来实现这一点。(在我的情况下, ~2 对应于“Program Files(x86)”)。之后,“gem install pg”能够毫无问题地找到“pg_config.exe”,并正确安装0.10.0。 - Phrogz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接