Rails:在OS X上安装PG gem - 无法构建本地扩展

202

看起来许多人在安装pg gem时遇到了问题。针对其他人提出的解决方案都没有对我起作用。

我已经尝试过安装pg gem和postgres.app,但pg gem无法安装。我首先遇到的错误是:

在安装pg (0.17.0)时发生错误,因此Bundler无法继续。 在捆绑之前,请确保gem install pg -v '0.17.0'成功。

有关将我的gem install指向pg配置的安装建议失败,并显示以下错误消息(该错误也被这个论坛上的许多其他人遇到):

Failed to build native extensions... Results logged to /Users/melanie/.rvm/gems/ruby-1.9.3-p448/gems/pg-0.17.0/ext/gem_make.out

我不知道如何查找或访问此日志文件以寻找进一步的线索。

当我尝试使用sudo apt-get install命令时,我还收到一个错误消息(命令未找到)。我已经在论坛上搜寻了6个小时,尝试每一条建议来使pg与我的rails项目配合工作。

我找不到关于如何更改路径的建议,或者具体需要做出哪些更改。我的which pg_config返回一个文件源。我已经使用它和一个命令安装pg,但失败了。

有很多人都遇到了类似的问题。许多答案建议使用Homebrew。但我不得不将其删除,因为它引起了其他问题。


1
嘿,有几个问题可以帮助我们更好地解决:
  • 你用的是Mac对吧?Homebrew出了什么问题吗?(顺便说一句,正如你所指出的,apt-get只适用于Ubuntu(以及其基于Debian的同类产品))
  • 你用的是哪个版本的Postgres?尝试在你的shell中运行psql -v
  • 你用的是哪个版本的Ruby?看起来是1.9.3,但是ruby -v会给你什么结果呢?
- rmosolgo
我应该补充说明,我的psql已添加在:/Applications/Postgres-1.app/Contents/MacOS/bin/psql; exit; psql(9.3.0) 但是which psql返回:usr/bin/psql - Mel
嗨,非常感谢您查看这个。我的psql版本是9.3.0,ruby版本是1.9.3。 - Mel
1
参见 @paninapress 的答案,对于 Postgres.app 来说非常好用。它对我来说效果很棒,并且不需要安装另一个 Postgres 实例。 - Jamon Holmgren
15个回答

480

我也遇到了同样的错误,但直到我下载了OS X 10.9 (Mavericks),才开始出现这个问题。叹气,又是一个操作系统升级的麻烦。

这是我如何解决它的(使用homebrew):

  • 安装Xcode Tools的另一个版本(在终端中键入brew update会提示您更新Xcode构建工具)
  • brew update
  • brew install postgresql

之后,gem install pg就可以正常工作了。


9
在经过两天的头痛尝试修复我的Rails数据库后,终于在这个方法的帮助下解决了问题。非常感谢。 - Deborah
4
这对我也有用——在一个新的Mavericks安装上。谢谢! - marcamillion
如果在使用Home Brew时遇到权限问题,请使用此链接中的脚本:https://gist.github.com/rpavlik/768518/download# - Toan Nguyen
1
仍在努力工作中。 该项目使用Ruby 2.2.0支持一个有些老旧的应用程序,但是还是感谢您。 - TristanZimmerman
2
  1. brew update
  2. brew install postgresql
  3. gem install pg
  4. bundle install
- kai_onthereal
显示剩余5条评论

234

如果您正在使用Ubuntu,请尝试安装以下库文件:

sudo apt-get install libpq-dev

然后

gem install pg

对我来说可行。


4
对我也奏效了。我使用的是Ubuntu 13.10。 - rafaelkin
4
请确保您输入的正确。它不是libpg-dev;它是Q而不是P!我曾经吃过亏,花了10分钟才弄清楚这一点。 - tir38
1
对于Amazon Linux,可以使用yum install postgres-devel进行安装。 - andrewtweber
1
在我的Ubuntu 14上有效! - 18bytes
6
针对 CentOS 操作系统,可以使用命令 yum install postgresql-devel 安装 PostgreSQL 的开发库。 - septerr
显示剩余5条评论

50

我正在使用OS X Mavericks(版本10.9)

当我运行上述代码时,我遇到了以下错误信息:如果PostgreSQL 9的构建失败,并且您已安装8.x版本。

因此,我运行了以下命令:

ARCHFLAGS="-arch x86_64" gem install pg

这对我有用,希望能帮助到别人 :)


2
+1,我尝试了其他方法,但最终通过gem安装pg并使用此解决方案。 - BMW
1
+1,同样地,这也是我的解决方案,我的postgresql已经通过brew安装了。感谢Jon的帖子。 - Jason Hoekstra
5
请注意,如果以 root 身份安装(出于任何原因),sudo 需要放在变量之前:sudo ARCHFLAGS="-arch x86_64" gem install pg - Noach Magedman
实际上,每次运行 bundle install 我都需要这个命令,因此我已将其放在了 ~/.bash_profile 中作为导出 :) - Ja͢ck

47

好的,我也遇到了这个问题(psql版本为9.3.0,ruby版本为2.1.2),对我起作用的解决方案是先设置bundle配置设置:

bundle config build.pg -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config

这个答案最终帮助我弄清楚了: https://dev59.com/LWox5IYBdhLWcg3wYzfX#9235107


6
如果你使用postgres.app,那么这种方法是首选的。使用Homebrew可能会解决本机扩展问题,但是拥有两个postgres应用程序会创建冲突(如端口分配)。另请参阅Sayanees在https://dev59.com/Y2Ik5IYBdhLWcg3wIq5U的回答。 - Epigene
4
对于Postgres.app来说,这绝对是正确的答案。 - Jamon Holmgren
在Mojave上运行良好,几分钟前已成功尝试。 - microspino

23

我试了几个小时的各种方法,但以下步骤最终解决了问题(我的操作系统是 OS X 10.9.4):

  1. 安装 Xcode 命令行工具(可以在 Apple Developer 网站下载)
  2. 使用 brew 卸载 postgresql
  3. 使用 brew 安装 postgresql
  4. 使用 ARCHFLAGS="-arch x86_64" 命令安装 pg gem

谢谢。我在第四步使用了sudo,这是不好的吗?我该如何避免它? - Roy
@Roy - 很高兴能帮忙 :) - 应该没问题,可能要避免使用sudo,因为我认为它会为所有用户安装,但如果你是系统上唯一的用户,那么这可能并不是很重要。 - Ali
brew uninstall postgresqlbrew install postgresql 在OS X 10.10和10.11上不是必要的步骤。只需运行 gem uninstall pg(并删除所有版本),然后确保重新执行 bundlegem install pg,就会使用新的命令行工具重建本地扩展,以适应此OS X版本。 - Olivier Lacan

8

简单步骤

  1. brew install postgresql
  2. gem install pg -v '你的版本'

(注:此文档涉及IT技术)

6

我认为“正确”的答案是首先通过将以下内容添加到~/.profile(如果使用的是ZSH,则添加到.zshrc~/.zprofile)来正确配置Postgres.app的PATH:

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

然后在终端中打开一个新的标签页或窗口,并使用以下命令安装 pg gem:

ARCHFLAGS="-arch x86_64" gem install pg

文档在这里:


6
类似地,在安装 Mavericks 之后,bundle update 在 pg gem 上报错,而 pg gem 仅在生产环境中使用而非本地。
我使用 Brew 来管理我的软件包,postgresql 已经被安装,但是我还是遇到了“no pg_config”的错误。
解决方法就是执行 brew uninstall postgresql,再执行 brew install postgresql。之后我就可以立即成功运行 bundle update 了。

6
在安装Postgres于 /Applications 目录的OSX系统上,我只需运行以下命令(根据您的版本更改 0.20 & 9.4):
gem install pg -v '0.20' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config

您需要:

使用以下命令构建本地扩展: '--with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config' 这可能需要一些时间... 成功安装pg-0.20。


你能解释一下为什么在实际提供参数之前我们必须使用连字符两次吗? - Akash Agarwal

4

运行brew update,然后运行brew install postgresql对我有用,这之后我能够轻松地运行pg宝石文件。


这至少是现代系统上的一个例子(例如macOS Big Sur)。 - Joshua Pinter

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