我刚从OS X Lion升级到OS X Mountain Lion。 我的铁路环境大部分都保持着机智。
为了让事情恢复到良好状态,我必须采取的唯一步骤是: - 安装XCode 4.4 - 安装XCode 4.4命令行工具 - 安装gcc-4.2
所以一切顺利。
这就是问题,我运行bundle install时几乎所有的gem都安装正常,除了我需要的最重要的一个 - postgresql gem'pg'。
对于高于0.12.2的版本,它特别失败。
我正在使用ruby 1.9.3p125。
我可以成功获取0.12.2 pg宝石,以及下面的版本,但它们会给我分段错误(我猜是因为我正在使用的ruby版本)。
所以这让我相信它特定于pg gem,而不是我的整体环境看到其他宝石安装正常。
我也尝试重新安装Postgresql以确保我的postgres环境没问题,并且在这方面看起来很不错。
是否有人能够安装'pg'宝石版本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.
答案 0 :(得分:17)
Deefour的评论得到了它!这是我安装PostgreSQL的方式。
我使用PostgreSQL一键安装程序,我猜测它没有为Mountain Lion正确设置libpq。
另一方面,Homebrew将为操作系统正确构建它。
通过自制程序安装postgres后
brew install postgresql
我能够安装我的宝石没问题。
谢谢大家!
答案 1 :(得分: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
答案 2 :(得分:4)
我有完全相同的问题;与您发布的相同的堆栈跟踪。
MRI 1.9.3-p286 / OS X 10.8.2 / Postgres 9.0.4 with homebrew。
我通过简单地解决了这个问题:
$ brew update
$ brew upgrade postgresql
$ bundle
希望它适用于其他人。
答案 3 :(得分:2)
重新安装ruby修复了升级到Mountain Lion后我遇到的类似问题
rvm reinstall 1.9.3
注意:还会运行以下内容,因为默认版本似乎会重置
rvm --default 1.9.3
作为参考,我发布了我在下面看到的错误
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 ***
答案 4 :(得分: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
答案 5 :(得分:1)
我遇到了同样的问题但是用homebrew重新安装postgresql并没有解决它。但是,这个命令为我做了:
sudo env ARCHFLAGS="-arch x86_64" gem install pg
答案 6 :(得分:1)
我能够通过从Heroku安装Postgres.app并删除我现有的postgresql安装来使其工作。您可以在此处下载该应用程序:
brew remove postgresql
bundle install
如果你没有使用brew,这里有一个指向Postgres.app的更多卸载文档的链接
答案 7 :(得分:1)
我刚通过这张票获得了我的作品:
How can I pass a parameter for gem installation when I run bundle install?
bundle config build.pg --with-pg-config=/path/to/pg_config
bundle install
就像Matt,Ranjan和Peter Mellett都说的那样,你必须得到正确的pg_config位置,而Mountain Lion有一个不同的位置,似乎不能很好地与rubygems一起使用,所以如果你发现你的旧版本像
/Library/PostgreSQL/bin/pg_config
然后你可以在安装之前在bundle配置中设置它。
我的情况是从Lion升级到Mountain Lion。
答案 8 :(得分: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
答案 9 :(得分:0)
对于那些使用Lubuntu 13.04并使用一键式工具安装pg的人,pg config在其他文件夹中,所以命令:
gem install pg -- --with-pg-config=/opt/PostgreSQL/9.3/bin/pg_config