【问题标题】:pg gem '0.14.0' on Mountain Lion failsMountain Lion 上的 pg gem '0.14.0' 失败
【发布时间】:2012-07-27 12:35:17
【问题描述】:

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

要让事情恢复到良好状态,我必须做的唯一步骤是: - 安装 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 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.

【问题讨论】:

  • 您如何管理您的 PostgreSQL 安装?自制?如果没有,你真的应该考虑一下;我刚刚将 pg 从 0.11 升级到 0.14 没有问题(我也有山狮)
  • 好建议。我正在使用一键安装程序。我会通过自制软件尝试。

标签: ruby-on-rails postgresql gem osx-mountain-lion


【解决方案1】:

重新安装 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 ***

【讨论】:

  • 谢谢米卡。感谢您的帮助,但它似乎没有用,但我认为我正在缩小问题范围。我觉得这与“libpq”未在 Mountain Lion OS X 上正常运行或加载有关。任何人都可以对这个库有所了解,以及它是否可能是导致此问题的原因?
【解决方案2】:

Deefour 的评论收到了!这是我安装 PostgreSQL 的方式。

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

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

通过 homebrew 安装 postgres 后

brew install postgresql

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

谢谢大家!

【讨论】:

  • 好的,但是如果您已经通过自制软件安装了 postgresql 怎么办?我愿意也不想丢失我的数据。
  • 用任何安装程序安装 postgresql 都没有错——你只需要引用一个实际的 pg_configure。见我上面的回答。
【解决方案3】:

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

sudo env ARCHFLAGS="-arch x86_64" gem install pg

【讨论】:

  • 也为我做了这个伎俩,谢谢。 (我刚刚摆脱了sudo,因为我使用的是 RVM。
【解决方案4】:

问题在于 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

【讨论】:

  • 我没用过一键安装,但是遇到了同样的问题,这个技巧也解决了我的问题。
  • homebrew 将 pg_config 放在/usr/bin/pg_config。我今天为此苦苦挣扎,因此希望这可以在将来避免一两次头痛。
  • MacOSX 使用 Brew,我仍然得到这个:检查 libpq-fe.h... *** extconf.rb failed ***
  • 这对我有用,但是我之后需要执行的bundle install 失败并出现同样的错误,直到我意识到我有 2 个 pg 工具实例,一个在 /usr/bin 另一个在/库/PostgreSQL/bin。由于 /Lib... 中的那个是最新的,并且是从官方安装程序安装的,所以我从 /usr 中删除了那些并设置了指向 /Library... 的符号链接...现在它的工作就像一个魅力。希望这对其他人有帮助。谢谢@Matt 和@Peter-Mellett
  • 谢谢——我更喜欢告诉我如何解决我实际遇到的问题的答案。 “env ARCHFLAGS ...”方法很有效
【解决方案5】:

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

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

我通过简单地解决了它:

$ brew update
$ brew upgrade postgresql
$ bundle

希望它适用于其他人。

【讨论】:

    【解决方案6】:

    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

    【讨论】:

      【解决方案7】:

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

      http://postgresapp.com/

      brew remove postgresql
      
      bundle install
      

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

      http://postgresapp.com/documentation#toc_16

      【讨论】:

      • 这非常感谢。安装 gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config 后必须在此命令行中使用它
      【解决方案8】:

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

      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 提供了一个不同的位置,似乎不能很好地与 ruby​​gems 配合使用,所以如果您发现您的旧版本像

      /Library/PostgreSQL/bin/pg_config
      

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

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

      【讨论】:

        【解决方案9】:

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

        env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/usr/local/bin/pg_ctl
        

        【讨论】:

          【解决方案10】:

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

          gem install pg -- --with-pg-config=/opt/PostgreSQL/9.3/bin/pg_config
          

          【讨论】:

            猜你喜欢
            • 2012-08-29
            • 2013-11-05
            • 1970-01-01
            • 2013-02-12
            • 2012-05-16
            • 1970-01-01
            • 1970-01-01
            • 2013-09-05
            • 1970-01-01
            相关资源
            最近更新 更多