15

我刚刚从 OS X Lion 升级到 OS X Mountain Lion。我的 Rails 环境大部分都保持不变。

为了使事情恢复到良好状态,我必须做的唯一步骤是: - 安装 XCode 4.4 - 安装 XCode 4.4 命令行工具 - 安装 gcc-4.2

所以一切都很顺利。

这就是问题所在,当我运行 bundle install 时,几乎所有的 gem 都正确安装了,除了我需要的最重要的 gem 之一 - postgresql gem 'pg'。

对于 0.12.2 以上的版本,它特别失败。

我正在使用红宝石 1.9.3p125。

我可以成功获取 0.12.2 pg gem 和以下版本,但是它们给了我分段错误(我猜是因为我正在使用的 ruby​​ 版本)。

所以这让我相信它特定于 pg gem,而不是我的整体环境,因为其他 gem 安装得很好。

我还尝试重新安装 Postgresql 以确保我的 postgres 环境正常并且在这方面看起来不错。

有没有人能够安装 'pg' gem 版本 0.13.0 或更高版本(最好是 0.14.X)?

这是我的堆栈跟踪:

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

    /Users/caseyli/.rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.h... yes
checking for PQconnectdb() in -lpq... yes
checking for PQconnectionUsedPassword()... yes
checking for PQisthreadsafe()... yes
checking for PQprepare()... yes
checking for PQexecParams()... yes
checking for PQescapeString()... yes
checking for PQescapeStringConn()... yes
checking for PQescapeLiteral()... yes
checking for PQescapeIdentifier()... yes
checking for PQgetCancel()... yes
checking for lo_create()... yes
checking for pg_encoding_to_char()... yes
checking for pg_char_to_encoding()... yes
checking for PQsetClientEncoding()... yes
checking for PQlibVersion()... yes
checking for PQping()... yes
checking for rb_encdb_alias()... yes
checking for rb_enc_alias()... no
checking for PGRES_COPY_BOTH in libpq-fe.h... no
checking for struct pgNotify.extra in libpq-fe.h... yes
checking for unistd.h... yes
checking for ruby/st.h... yes
creating extconf.h
creating Makefile

make
compiling pg.c
pg.c: In function ‘pg_s_library_version’:
pg.c:273: warning: implicit declaration of function ‘PQlibVersion’
pg.c: In function ‘Init_pg_ext’:
pg.c:384: error: ‘PQPING_OK’ undeclared (first use in this function)
pg.c:384: error: (Each undeclared identifier is reported only once
pg.c:384: error: for each function it appears in.)
pg.c:386: error: ‘PQPING_REJECT’ undeclared (first use in this function)
pg.c:388: error: ‘PQPING_NO_RESPONSE’ undeclared (first use in this function)
pg.c:390: error: ‘PQPING_NO_ATTEMPT’ undeclared (first use in this function)
make: *** [pg.o] Error 1


Gem files will remain installed in /Users/caseyli/.rvm/gems/ruby-1.9.3-        p125@elliottfarmequipment/gems/pg-0.14.0 for inspection.
4

10 回答 10

17

迪福的评论明白了!这是我安装 PostgreSQL 的方式。

我使用 PostgreSQL 一键式安装程序,我猜它没有为 Mountain Lion 正确设置 libpq。

另一方面,Homebrew 将为操作系统正确构建它。

通过自制软件安装 postgres 后

brew install postgresql

我能够安装我的gem没问题。

谢谢大家!

于 2012-07-30T03:29:13.463 回答
13

问题是 pg_config 的位置。如果您使用一键式安装程序,它位于 /Library/PostgreSQL/9.2/bin/pg_config 中,因此这将构建您的 gem 就好了:

env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Library/PostgreSQL/9.2/bin/pg_config

于 2012-10-18T03:47:38.177 回答
4

我有完全相同的问题;与您发布的相同堆栈跟踪。

MRI 1.9.3-p286 / OS X 10.8.2 / Postgres 9.0.4 和自制软件。

我通过简单地解决了它:

$ brew update
$ brew upgrade postgresql
$ bundle

希望它适用于其他人。

于 2012-10-25T15:29:46.963 回答
2

Reinstalling ruby fixed a similar issue I was having after upgrading to Mountain Lion

rvm reinstall 1.9.3

Note: also run the following as it seems the default version resets

rvm --default 1.9.3

For reference I posted the error I was seeing below

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

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb --with pg=/usr/local/Cellar/postgresql/9.1.4/bin
checking for pg_config... yes
Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
于 2012-07-29T22:14:44.217 回答
2

Mac 带有一个过时的预建 PostgreSQL 客户端安装和它附带的 pg_config 文件与任何新的 PostgreSQL 服务器和客户端安装冲突。

使用 pg_config 的完全限定文件名安装 ruby​​ gem 会覆盖 pg_config 的默认已知位置并且安装成功。

EnterpriseDB一键安装的pg_config当前位置:/Library/PostgreSQL/bin/pg_config

这个命令终于对我有用。

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

于 2013-01-05T14:39:35.250 回答
1

我遇到了同样的问题,但是用自制软件重新安装 postgresql 并没有解决它。但是,这个命令为我做了:

sudo env ARCHFLAGS="-arch x86_64" gem install pg
于 2012-09-30T18:42:43.170 回答
1

通过从 Heroku 安装 Postgres.app 并删除我现有的 postgresql 安装,我能够让它工作。您可以在此处下载该应用程序:

http://postgresapp.com/

brew remove postgresql

bundle install

如果您没有使用 brew,这里是 Postgres.app 更多卸载文档的链接

http://postgresapp.com/documentation#toc_16

于 2013-03-21T13:06:12.820 回答
1

我刚刚通过这张票启动并运行:

运行 bundle install 时如何传递 gem 安装的参数?

bundle config build.pg --with-pg-config=/path/to/pg_config
bundle install

就像 Matt、Ranjan 和 Peter Mellett 都说的那样,你必须获得正确的 pg_config 位置,而 Mountain Lion 提供了一个不同的位置,它似乎不能很好地与 ruby​​gems 配合使用,所以如果你发现你的旧版本像

/Library/PostgreSQL/bin/pg_config

然后您可以在安装之前在捆绑配置中进行设置。

我的情况是从 Lion 升级到 Mountain Lion。

于 2013-03-22T14:01:04.797 回答
0

对于那些使用 Kubuntu 13.04 并通过一键工具安装 pg 的人,pg config 在其他文件夹中,所以命令:

gem install pg -- --with-pg-config=/opt/PostgreSQL/9.3/bin/pg_config
于 2013-09-09T07:07:18.053 回答
0

Homebrew 安装pg_ctl在 中/usr/local/bin/pg_ctl,所以我的命令是:

env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/usr/local/bin/pg_ctl
于 2013-05-14T13:59:39.157 回答