无法安装pg gem

时间:2013-03-05 21:48:21

标签: gem bundler pg

我花了好几个小时试图找出它为什么不起作用后,终于设法得到了'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。有没有办法确保捆绑器使用正确的路径?

2 个答案:

答案 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)捆绑安装