【问题标题】:Failing installing pg gem, "mkmf.rb can't find header files for ruby" (Mac OSX 10.6.5)安装 pg gem 失败,“mkmf.rb 找不到 ruby​​ 的头文件”(Mac OSX 10.6.5)
【发布时间】:2011-05-22 13:07:52
【问题描述】:

我刚刚升级到 Rails 3,在 MacPorts、gem 和数据库方面有些混乱需要整理。我扔掉了所有的宝石并重新安装它们。除了 pg gem 的要求外,一切似乎都很好。

创建一个新的 Rails 3 项目后,为 PostgreSQL 准备,服务器无法启动,抱怨缺少 pg gem。执行bundle install,它运行了一段时间,当然,在 pg gem 上失败了。

Installing pg (0.10.0) with native extensions /Library/Ruby/Site/1.8/rubygems/installer.rb:483:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb 
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/pg-0.10.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/pg-0.10.0/ext/gem_make.out
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `each'
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `build_extensions'
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:198:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/source.rb:95:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/installer.rb:55:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/installer.rb:44:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/installer.rb:8:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/cli.rb:225:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/task.rb:22:in `send'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/task.rb:22:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor.rb:246:in `dispatch'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/base.rb:389:in `start'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/bin/bundle:13
    from /usr/bin/bundle:19:in `load'
    from /usr/bin/bundle:19

我在论坛和博客上发现的最常见的建议是(重新)安装 XCode 开发人员工具。它们已经在那里了,但我还是重新安装了它们,没有比上面更好的结果。

which ruby/usr/bin/rubyruby -vruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0],如果那里有任何线索的话。

欢迎指点。任何有助于解决此问题的缺失信息,我都会很乐意及时提供!


我下载了 XCode,因为据说 DVD 版本已经坏了,而且有一段时间事情变得更好了。 bundle install 开始谈论“archflags”,所以我这样做了:

sudo env ARCHFLAGS="-arch i386" bundle install

一切似乎都很顺利,直到启动 Rails 时,他说:

/Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle, 9): no suitable image found.  Did find: (LoadError)
    /Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle: mach-o, but wrong architecture - /Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle

为了解决任何问题,我尝试将 bundle install 设置为 -arch x86_64,但并不顺利:

*** Your PostgreSQL installation doesn't seem to have an architecture in common with the running ruby interpreter ([] vs. ["x86_64"])
I'll continue anyway, but if it fails, try setting ARCHFLAGS.
[...]
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***

libpq 是我现在必须通过一些标志提供路径的东西吗?还是我完全出去吃午饭了?

【问题讨论】:

  • 这种错误通常说明你没有安装相关软件的开发包,这里是PG。
  • DVD 中 Snow Leopard 附带的 XCode 已损坏,因此我们需要对其进行更新。
  • Snow Leopard 是 64 位的,所以您必须使用 x86_64。如果您安装了任何东西并强制使用i386,则需要将其重新编译为x86_64,否则您将看到收到的消息。这包括在安装 Snow Leopard 之前编译/安装的所有 gem(如果您之前在该机器上运行 Leopard)。
  • 你需要做一个locate libpq 并找到它在哪里。它可能在 Postgres 安装的 lib 目录中。然后扫描 gem 的 README 和/或 INSTALL 文档,看看是否需要一个标志,类似于“include”和“lib”的标志。在谷歌上搜索“ruby mac os libpq”,很多线程会显示信息;其他人也遇到过这种情况,这是将 Ruby 与服务集成的更复杂的部分之一,但一旦完成就非常值得。我喜欢使用 Postgres,并且更喜欢它而不是替代品。
  • FWIW,我正在使用自制软件和 rbenv,并在尝试 gem install pg: Can't find the PostgreSQL client library (libpq) 时看到了这一点。旧的 PostgreSQL 是问题所在。在看到自制安装的pg_config之前,我必须rm -rf /Library/Postgre*

标签: ruby-on-rails ruby postgresql rubygems


【解决方案1】:

我在 CentOS 6.3 上尝试通过 gem 安装 rails 时遇到此错误。

在谷歌上搜索了一下,我找到了一个快速解决方法:安装 ruby​​-devel 包。

sudo yum install ruby-devel

之后,一切正常。

【讨论】:

  • 这对我也有用。但在 Ubuntu 15.10 中,它的 sudo apt install ruby-dev
【解决方案2】:

通常,Postgres 的 gem 包想知道 pg_config 隐藏在哪里,以便他们可以询问有关 Postgres 安装的信息。

使用 locate pg_config 查看您的 Mac 是否知道它的隐藏位置。

我使用 mappstack 安装了 Postgres 的副本,所以我的 Mac 说有一个副本:

/Applications/mappstack-1.2-3/postgresql/bin/pg_config

另一个在:

/Library/PostgreSQL/9.0/bin/pg_config

我不记得在/Library/PostgreSQL/9.0安装了那个,所以它可能是由雪豹预装的,或者是我在工作量太大的影响下安装的,可能是使用EnterpriseDB的Postgres安装程序。

找到pg_config 的位置后,尝试将该目录添加到 PATH 的开头,然后重新运行 gem 安装。 或使用:

export SQL_PATH=/Library/PostgreSQL/9.0
gem install pg -- --with-pg-config=$SQL_PATH/bin/pg_config

并尝试安装。如果其中任何一项工作都完成了。否则……

安装程序可能想要的下一件事是访问 Postgres 标头,因此您查看 bin 目录的父目录,看看是否可以找到 include 目录。

之后,在该目录中查找lib 目录。一旦您知道了这些位置,您应该拥有设置环境变量以完成安装程序所需的一切。您需要阅读安装程序的READMEINSTALL 文件并查看需要设置的内容。您将进行配置:

export include_dir=$SQL_PATH/include/
export     lib_dir=$SQL_PATH/lib/
gem install pg -- --with-pgsql-include-dir=$include_dir --with-pgsql-lib-dir=$lib_dir

希望这会有所帮助。我的 Rails 3 和我的 Postgres 运行良好,使用了 mappstack Postgres 和 EnterpriseDB 版本,所以上面的信息应该可以帮助你。

【讨论】:

  • 谢谢!我走得更远了(编辑过的原始帖子),也许现在只有一些 pg lib 路径可供您提供。也许我越来越近了? :)
  • 上述解决方案帮助我在另一台计算机上最初看起来处于相同状态,所以这是一个可行的解决方案,谢谢。仍在与缺少更多东西的主计算机战斗..
  • 重新编辑您的原始问题并添加您看到的症状。很可能仍然缺少某些东西。我只是在使用我的 Postgres 和 Rails3 进行一些开发,所以我知道它可以正常工作。
  • 我使用了 postgre 网站上的 PostGRE 安装程序。
  • “或者我是在工作太多的影响下才这样做的”:-) 你妈妈不是告诉过你永远不要去那个糟糕的社区吗? >
【解决方案3】:

这在 OS X 10.6.6 上对我有用,从源代码安装了 PostgreSQL 9.0.1:

export PATH=/usr/local/psql/bin:$PATH
export ARCHFLAGS='-arch x86_64'
gem install pg

您可能需要编辑该 PATH 以匹配您的 postgres 安装位置。

【讨论】:

  • 我的问题与@npup 报告的相同:运行bundle install 导致了问题。当我尝试gem install pg 时,它运行没有问题,但bundle install 仍然失败。我正在运行 OS/X 10.6.7、PostgreSQL 8.4.6、RVM 1.1.9、Ruby 1.9.2p136 和 Rails 3.0.4。运行export ARCHFLAGS='-arch x86_64',然后运行bundle install,bundle终于安装完全正确
  • 这个对我有用。为这个问题选择的修复程序适用于通过 gem 安装 pg,但 bundle 仍然被阻塞。设置 ARCHFLAGS 是通过 Homebrew 安装的 10.7 和 PostgreSQL 的修复。
  • 另外,请确保您运行的是 64 位 ruby​​。文件rbenv which ruby
【解决方案4】:

我已经通过 macports 安装了 postgres 1.9.0。 OS X 10.5 PPC

这对我有用:

gem install pg -- --with-pg-lib=/opt/local/lib/postgresql90 --with-pg-include=/opt/local/include/postgresql90

祝你好运!

【讨论】:

    【解决方案5】:

    通常 Postgres 的 gem 包想知道 pg_config 隐藏在哪里。 . .

    是的 - 这可能是诀窍。如果您刚刚安装了 PostgreSQL 并将其添加到您的路径中,并且在旧 shell 中进行了“捆绑安装”,它将无法找到 pg_config。如果是这种情况,只需获得一个新的外壳,然后再试一次。否则,请按照上述步骤找到它并让 bundler 看到它。

    为 postgresql83 安装的 macports 运行良好,并且开箱即用地与 rails 配合得很好 - 这是另一种方法。

    【讨论】:

      【解决方案6】:

      今晚我花了很多时间来完成这项工作。我看到了与此类似的错误:

      Can't find the PostgreSQL client library (libpq)
      *** extconf.rb failed ***
      

      我尝试了不同的 gem 安装变体:

      gem install pg -- --with-pg-config=/Library/PostgreSQL/9.1/bin/ --with-pg-lib=/Library/PostgreSQL/9.1/lib/ --with-pg-include=/Library/PostgreSQL/9.1/include/
      

      但最后对我有用的是:

      gem install pg -- --with-pg-dir=/Library/PostgreSQL/9.1/
      

      此外,在此之前我更新了 rvm (rvm get head) 并重新安装了 ruby​​ (rvm --force install 1.9.2)。不确定这是否有帮助,但如果您仍然遇到问题,可能值得尝试

      【讨论】:

        【解决方案7】:

        您可能想尝试使用 homebrew 安装 postgres (brew install postgres) 和 Ruby Version Manager 安装和维护 ruby​​ 和 ruby​​ gems。

        它将保持您的默认版本(随 OSX 一起安装)不变,并为您提供更大的灵活性。例如,您可以使用 rails 2 或 3 以及 ruby​​ 1.8.7 和 1.9.2 的不同 rails 应用程序都安装在同一系统上而不会出现问题。

        【讨论】:

        • 谢谢。我对摆弄 postgres 有点警惕,因为这是我的工作开发机器(我们在那里使用 postgres,它的设置很好)。也许没关系?我不知道自制软件是如何工作的(还)。
        • 我鼓励你去看看。 Homebrew 将文件安装在自己的文件路径下(即/usr/local/Cellar/postgresql/),然后将二进制文件符号链接到/usr/local/bin 以便于访问(并且不会触及任何预安装的内容)。即使您不使用自制软件,您仍然应该查看 RVM。它可能会为您节省很多管理宝石的麻烦。
        • Homebrew 非常棒——现在已经挽救了我几次理智。 RVM 是任何 ruby​​/rails 开发人员的必备工具。
        【解决方案8】:

        这对我有用:

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

        【讨论】:

          【解决方案9】:

          这里和网络上的所有建议对我来说都是不完整的,直到我在 CentOS 6.6 上运行以下内容:

          wget -c ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/6.3/x86_64/updates/security/kernel-devel-2.6.32-504.1.3.el6.x86_64.rpm && sudo yum install kernel-devel-2.6.32-504.1.3.el6.x86_64.rpm
          wget -c ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/6.6/x86_64/updates/security/kernel-headers-2.6.32-504.30.3.el6.x86_64.rpm && sudo yum install kernel-headers-2.6.32-504.30.3.el6.x86_64.rpm
          sudo yum groupinstall "Development Tools" "Development Libraries" 
          sudo yum -y install gcc gcc-c++ git ruby ruby-devel rubygems libvirt-devel mysql-devel postgresql-devel openssl-devel libxml2-devel sqlite-devel libxslt-devel zlib-devel readline-devel tar make automake autoconf curl-devel openssl-devel zlib-devel httpd-devel apr-devel apr-util-devel sqlite-devel ruby193-ruby-doc ruby193-ruby-devel ruby193-build
          curl -L get.rvm.io | bash -s stable && source $HOME/.rvm/scripts/rvm && rvm requirements
          

          【讨论】:

            【解决方案10】:

            安装 Postgres.app:

            http://postgresapp.com/

            验证安装的版本:

            $ ls /Library/PostgreSQL/
            # 9.4
            

            导出SQL_PATH:

            export SQL_PATH=/Library/PostgreSQL/9.4
            

            安装pg:

            gem install pg -- --with-pg-config=$SQL_PATH/bin/pg_config
            

            【讨论】:

              猜你喜欢
              • 2013-12-31
              • 2015-05-03
              • 2018-03-04
              • 2020-07-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-07-17
              • 2014-08-27
              相关资源
              最近更新 更多