我花了好几个小时试图找出它为什么不起作用后,终于设法得到了'pg'宝石安装......
最后我输入sudo env ARCHFLAGS="-arch x86_64" gem install pg -v 0.12.2 -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
,就像一个魅力。但是现在我尝试捆绑时仍然有同样的错误 - 所以我猜我没有真正解决问题?无论如何,这是bundle install
所说的:
Installing pg (0.12.2)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/Users/thomas/.rvm/rubies/ruby-1.9.3-p392/bin/ruby extconf.rb --with-pg-config=/usr/pgsql-9.2/bin/pg_config
Using config values from /usr/pgsql-9.2/bin/pg_config
sh: /usr/pgsql-9.2/bin/pg_config: No such file or directory
sh: /usr/pgsql-9.2/bin/pg_config: No such file or directory
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.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 PQgetCancel()... yes
checking for lo_create()... yes
checking for pg_encoding_to_char()... yes
checking for PQsetClientEncoding()... yes
checking for rb_encdb_alias()... yes
checking for rb_enc_alias()... yes
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 compat.c
compiling pg.c
pg.c: In function ‘pgconn_wait_for_notify’:
pg.c:2117: warning: ‘rb_thread_select’ is deprecated (declared at /Users/thomas/.rvm/rubies/ruby-1.9.3-p392/include/ruby-1.9.1/ruby/intern.h:380)
pg.c: In function ‘pgconn_block’:
pg.c:2592: warning: format not a string literal and no format arguments
pg.c:2598: warning: ‘rb_thread_select’ is deprecated (declared at /Users/thomas/.rvm/rubies/ruby-1.9.3-p392/include/ruby-1.9.1/ruby/intern.h:380)
pg.c:2607: warning: format not a string literal and no format arguments
linking shared-object pg_ext.bundle
ld: warning: directory not found for option '-L-Wl,-undefined,dynamic_lookup'
Undefined symbols for architecture x86_64:
....
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [pg_ext.bundle] Error 1
我认为问题是bundler尝试使用另一个postresql安装(我已删除)的pg_config来安装gem。有没有办法确保捆绑器使用正确的路径?
答案 0 :(得分:10)
我被捆绑安装了3天。试着加入env ARCHFLAGS =“ - arch x86_64”gem install pg - --with-pg-config = / usr / local / Cellar / postgresql / 9.3.5_1 / bin / pg_config
我能够看到pg gem在此命令之后安装,但它仍然没有从bundle install安装,这很痛苦,因为我知道在Gemfile中写什么,除了gem'pg'
最终对我有用的是发现我的pg_config位于/Library/PostgreSQL/9.3/bin/pg_config中,默认情况下,Gemfile包安装在/ usr / local / bin / pg_config中查找
我刚刚运行了以下命令并且发生了魔法。 捆绑配置build.pg --with-pg-config = / Library / PostgreSQL / 9.3 / bin / pg_config
答案 1 :(得分:3)
一些纠正。 对于那些使用自制软件安装postgres的人。
1)在〜/ .bash_profile
中写下以下行导出ARCHFLAGS =" -arch x86_64"
2)重启控制台
3)执行以下命令
捆绑配置build.pg --with-pg-config = / usr / local / Cellar / postgresql / 9.3.5_1 / bin / pg_config (这必须是你的pg配置地址,每个都可以根据postgres的版本而有所不同)
4)通过运行此命令在本地安装pg
sudo env ARCHFLAGS =" -arch x86_64" gem install pg - --with-pg-config = / usr / local / Cellar / postgresql / 9.3.5_1 / bin / pg_config
5)捆绑安装