安装pg宝石; 错误: 无法构建本地扩展宝石

20

更新到OS X 10.9 Mavericks后,我尝试启动一个Rails 3应用程序,但无法连接到PG数据库。在PGAdmin III上检查,数据库仍然存在并且正常工作。因此我尝试重新安装pg宝石:

gem uninstall pg
gem install pg

但是最后一个命令执行失败,出现以下错误:

构建本地扩展需要一些时间... 错误:安装 pg 出错:

错误:无法构建宝石原生扩展。

    /Users/XXX/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb checking for pg_config... yes Using config values from

/usr/local/bin/pg_config * extconf.rb 失败了 * 可能由于缺少必要的库和/或头文件,无法创建Makefile。请检查mkmf.log文件获取更多详细信息。您可能需要配置选项。

/Users/XXX/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:381:in `try_do':编译器未能生成可执行文件。

(RuntimeError) 您必须首先安装开发工具。 来自/Users/XXX/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:461:in try_link0从 /Users/XXX/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:476:in try_link,来自extconf.rb:39:''

我猜问题与Xcode开发者工具有关。我已将Xcode更新到最新版本,但并没有解决问题。你知道如何解决吗?

8个回答

22

你是正确的,这个问题与Xcode开发工具有关。确保安装了所有开发工具(而不仅仅是像先前答案中提到的安装gcc)是一个好主意:

  1. 打开Xcode
  2. 在应用程序菜单项“Xcode”中选择“打开开发者工具”>“更多开发者工具”
  3. 这将带您进入一个包含许多软件的网站。请下载并安装“命令行工具(OS X Mavericks)for Xcode - Late October 2013”。
  4. 现在您就可以正确地安装gem了。

对于在Mac OS X Mavericks上的全新安装Postgres 9.3.0应用程序的其他任何人(即,您没有使用homebrew进行Postgres安装),您可能会注意到尽管您可以构建pg gem,但由于dylib问题,您无法运行rake:

rake aborted!
dlopen(/Users/[USERNAME]/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/pg-0.15.1/lib/pg_ext.bundle, 9): Library not loaded: @loader_path/../lib/libpq.5.dylib
  Referenced from: /Users/[USERNAME]/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/pg-0.15.1/lib/pg_ext.bundle
  Reason: image not found - /Users/[USERNAME]/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/pg-0.15.1/lib/pg_ext.bundle

很遗憾,这是Postgres 9.3.0当前发布版本存在的问题。回到之前的版本将为您解决此问题:

  1. 卸载pg gem:gem uninstall pg
  2. 将您的9.3.0 Postgres应用程序移到垃圾箱,并清空垃圾箱
  3. 在此处安装Postgres应用程序9.2.2.0版本:http://postgres-app.s3.amazonaws.com/PostgresApp-9-2-2-0.zip
  4. 重新安装pg gem:gem install pg

*感谢jhiro009此线程中的评论指出了问题的最后一个部分的正确方向,尽管他提到的9.2.4.3版本对我无效。


非常感谢,我之前还有一个问题,所有人都告诉我解决方法是“xcode-select --install”,但对我来说并没有用,现在你的解决方案“更多开发者工具”完美地解决了我的问题 :) - rafa
您不必使用早期版本的PostgreSQL。如果您创建一个符号链接到缺失的dylib文件,仍然可以成功安装PostgreSQL 9.3.x。在我的情况下,我需要运行:sudo ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib /usr/local/lib/libpq.5.dylib - 2potatocakes

19

使用 homebrew 解决了我的问题:

gem uninstall pg
brew install apple-gcc42
gem install pg

编辑:我也手动安装了“devtools”

xcode-select --install

2
唉,我(不是发帖人)希望避免安装brew。 - kwerle
2
Brew 安装非常容易,未来会让你免受困扰;但如果你真的不想或者无法安装,可以尝试升级 Apple 糟糕的 GCC:https://github.com/kennethreitz/osx-gcc-installer - codenamev
@kwerle 我建议你试试Homebrew,它可以让很多事情变得更容易,并在许多不同的情况下为你节省时间。 - Paul Pettengill
1
“xcode-select --install” 显示了一个消息,说它不能安装该软件,因为它不可用... 可以手动进行:1)打开Xcode;2)在应用程序菜单项“Xcode”中选择打开开发人员工具 > 更多开发人员工具…;3)下载并安装“Command Line Tools (OS X Mavericks) for Xcode - Late October 2013”。 - Someone Somewhere
1
我还应该指出,你也应该通过brew安装PSQL本身,以避免出现这样的问题。软件包管理器的工作是通过处理依赖项和通常的“管理”软件包来使您的生活更轻松。不要害怕使用它。 - Tanel Suurhans
显示剩余3条评论

8
在OS X Mavericks上
sudo ln -s /usr/bin/llvm-gcc /usr/bin/gcc-4.2
gem uninstall pg; gem install pg;

适用于Homebrew安装的PostgreSQL(9.3.1版本)和已安装Apple命令行工具(pg 0.17.0版本)。

3

对于我来说,这些解决方案都没有用,而且我不想使用MacPorts。试着下载Postgres App并将其放入应用程序目录中。

然后,指定新下载的pg_config的位置,它位于应用程序中:

gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config

如果遇到缺少头文件的问题,请尝试指定应用程序的include目录:
gem install pg -- --with-pg-include='/Applications/Postgres.app/Contents/MacOS/include/'

1
太棒了!完全为我所用! - Fabio Russo
我无法在这种方式下使用数据映射器。 - hoitomt

3

之前的解决方案对我没有用(我刚升级到Mavericks并更新了XCode)。相反,我安装了Postgress.app。并调用了它。

gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config

2
如果您只是想快速解决问题,请在database.yml文件中添加以下内容:
host: localhost

我曾经遇到过同样的问题,添加了那一行代码后,现在一切都正常了。

0

我有幸遵循新竹子团队的这篇帖子:

使用OS X 10.9 Mavericks进行编码的3个快速提示

在安装了Xcode开发工具之后,第三步解决了一切问题:

brew tap homebrew/versions && brew install apple-gcc42
brew link --force apple-gcc42
ln -nsf $(which gcc-4.2) /usr/bin/gcc-4.2

-1

我第一次尝试安装pg时遇到了这个问题。通过各种尝试和错误,我找到了可行的方法。谢天谢地,我的笔记在Mavericks破坏一切时也起作用了。

希望这可以帮到你:

不要进行任何酿造操作。

下载enterpriseDB的一键安装程序,挂载并运行。 如果不起作用,请通过命令行(无人值守模式)运行它,它将更改内存设置。重新启动,再次运行。

创建一个名为postgres的用户,并使用您提供的密码。还安装了pgadmin III。

在应用程序目录中运行以下内容:

env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-include=/Library/PostgreSQL/9.2/include/ --with-pg-lib=/Library/PostgreSQL/9.2 sudo env ARCHFLAGS='-arch i386' gem install pg/lib/

打开pgadmin3并为rails创建用户名和密码,然后将其添加到配置中。

psql [database_name] # 检查您的数据库。或使用pgadmin III


本来想给这个点个踩,但后来改变了主意,但似乎无法撤销... 无论如何,重点是你应该优先使用Brew而不是其他的黑科技。Brew是一个软件包管理器,它可以为您解决依赖关系,让您保持最新状态,并且还可以让您干净地卸载您不需要的东西。 - Tanel Suurhans

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