【问题标题】:Installing pg gem; ERROR: Failed to build gem native extension安装 pg gem;错误:无法构建 gem 原生扩展
【发布时间】:2013-11-01 14:07:33
【问题描述】:

更新到 OS X 10.9 Mavericks 后,我尝试启动 Rails 3 应用程序,但无法连接到 PG 数据库。检查 PGAdmin III,数据库仍然存在并且工作正常。 所以我尝试重新安装 pg gem:

gem uninstall pg
gem install pg

但是最后一条命令没有成功,报如下错误:

构建原生扩展。这可能需要一段时间... 错误:错误 安装 pg:

错误:无法构建 gem 原生扩展。

    /Users/XXX/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb checking for pg_config... yes Using config values from

/usr/local/bin/pg_config * extconf.rb failed * 由于某种原因无法创建 Makefile,可能缺少必要的库和/或头文件。查看 mkmf.log 文件以获取更多详细信息。您可能需要配置 选项。

/Users/XXX/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': 编译器生成可执行文件失败。

(RuntimeError) 你必须先安装开发工具。从 /Users/XXX/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:461:in try_link0' from /Users/XXX/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:476:in try_link' 来自 extconf.rb:39:in `'

我猜这个问题与 Xcode 开发者工具有关。我将 Xcode 更新到最新版本,但这并没有解决问题。你知道怎么解决吗?

【问题讨论】:

    标签: ruby-on-rails postgresql osx-mavericks pg


    【解决方案1】:

    您说得对,问题与 Xcode 开发人员工具有关。确保您已安装所有开发人员工具(而不是如上一个答案中提到的仅安装 gcc)并不是一个坏主意:

    1. 打开 Xcode
    2. 在应用程序菜单项“Xcode”中选择 Open Developer Tool > More Developer Tools...
    3. 这会将您带到一个包含大量软件的站点。继续下载并安装“Xcode 的命令行工具 (OS X Mavericks) - 2013 年 10 月下旬”。
    4. 您现在可以正确安装 gem。

    对于在 Mac OS X Mavericks 上全新安装 Postgres 9.3.0 应用程序(即您没有使用自制软件安装 Postgres)来解决此问题的其他人,您可能会注意到,即使您可以构建由于 dylib 问题,您无法运行 rake 的 pg gem:

    rake aborted!
    dlopen(/Users/[USERNAME]/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/pg-0.15.1/lib/pg_ext.bundle, 9): Library not loaded: @loader_path/../lib/libpq.5.dylib
      Referenced from: /Users/[USERNAME]/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/pg-0.15.1/lib/pg_ext.bundle
      Reason: image not found - /Users/[USERNAME]/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/pg-0.15.1/lib/pg_ext.bundle
    

    不幸的是,这是 Postgres 9.3.0 的当前发行版存在的问题。回到以前的版本将为您修复它:

    1. 卸载pg gem:gem uninstall pg
    2. 删除您的 9.3.0 Postgres 应用程序,方法是将其拖到回收站并清空回收站
    3. 在此处安装 Postgres 应用程序的 9.2.2.0 版本:http://postgres-app.s3.amazonaws.com/PostgresApp-9-2-2-0.zip
    4. 重新安装pg gem:gem install pg

    *感谢 this thread 上 jhiro009 的 comment 在最后一个 Postgres 应用程序部分为我指出正确的方向,尽管他提到的 9.2.4.3 版本对我不起作用。

    【讨论】:

    • 非常感谢,我遇到了另一个问题,所有人都告诉我要解决它是xcode-select --install,但它对我不起作用,现在你的解决方案更多开发工具完美运行:)
    • 您不必使用早期版本的 postgresql。如果您创建一个指向丢失的 dylib 文件的符号链接,您仍然可以成功安装 postgresql 9.3.x。就我而言,我必须运行: sudo ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib /usr/local/lib/libpq.5.dylib
    【解决方案2】:

    使用homebrew 为我解决了这个问题:

    gem uninstall pg
    brew install apple-gcc42
    gem install pg
    

    编辑:我还手动安装了“devtools”

    xcode-select --install
    

    【讨论】:

    • 呃。我(不是海报)希望避免安装 brew。
    • brew 安装非常简单,让您免于日后的头痛;但如果你真的不想或不能,你可以随时尝试升级 Apple 糟糕的 GCC:github.com/kennethreitz/osx-gcc-installer
    • @kwerle 我会试一试自制软件,它确实让很多事情变得更容易,并在很多不同的情况下为您节省。
    • xcode-select --install 显示一条消息,它无法安装该软件,因为它不可用... 使用手动方式: 1) 打开 Xcode。 2) 在应用程序菜单项“Xcode”中选择 Open Developer Tool > More Developer Tools... 3) 下载并安装“Command Line Tools (OS X Mavericks) for Xcode - Late October 2013”​​。
    • 我还应该指出,您也应该通过 brew 安装 PSQL 本身,以避免出现此类情况。包管理器的工作是通过处理依赖项和通常管理你的包来让你的生活更轻松。不要害怕使用它。
    【解决方案3】:

    在 OS X Mavericks 上

    sudo ln -s /usr/bin/llvm-gcc /usr/bin/gcc-4.2
    gem uninstall pg; gem install pg;
    

    适用于 Homebrew Postgresql (9.3.1) 安装和 Apple 命令行工具安装 (pg 0.17.0)。

    【讨论】:

      【解决方案4】:

      以前的解决方案都不适合我(我刚刚升级到 Mavericks 并更新了 XCode)。相反,我安装了Postgress.app。并称为

      gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
      

      【讨论】:

        【解决方案5】:

        这些解决方案都不适合我,我不想使用 MacPorts。尝试下载Postgres App并将其放入Application目录。

        然后,指定新下载的pg_config的位置,它位于应用程序内部:

        gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
        

        如果您遇到缺少标头的问题,请尝试指定应用程序的include 目录:

        gem install pg -- --with-pg-include='/Applications/Postgres.app/Contents/MacOS/include/'
        

        【讨论】:

        • 太棒了!完全是为我做的!
        • 这样做时我无法使用 Data Mapper
        【解决方案6】:

        如果您只想快速修复,请将以下内容添加到您的 database.yml 文件中:

        host: localhost
        

        我遇到了确切的问题,添加了那行,现在一切都很好。

        【讨论】:

          【解决方案7】:

          我很幸运地关注了 New-Bamboo 的人的这篇帖子:

          3 Quick Tips for Coding with OS X 10.9 Mavericks

          安装完xcode开发工具后,第三步整理一切:

          brew tap homebrew/versions && brew install apple-gcc42
          brew link --force apple-gcc42
          ln -nsf $(which gcc-4.2) /usr/bin/gcc-4.2
          

          【讨论】:

            【解决方案8】:

            我第一次尝试安装 pg 时遇到了这个问题。通过各种试验和错误,我发现了一些有效的方法。谢天谢地,当小牛队打破一切时,我的笔记也奏效了。

            希望这会有所帮助:

            不要进行任何酿造。

            下载enterpriseDB一键安装,挂载运行。 如果它不起作用,请通过命令行(无人值守模式)运行它,它将更改内存设置。重新启动,再次运行。

            使用您提供的密码创建一个名为 postgres 的用户。还安装 pgadmin III。

            在应用目录中运行:

            env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-include=/Library/PostgreSQL/9.2/include/ --with-pg-lib=/Library/PostgreSQL/9.2 sudo env ARCHFLAGS ='-arch i386' gem install pg/lib/

            打开 pgadmin3 并为 rails 创建一个用户名和密码,然后将其添加到 config.xml 中。

            psql [database_name] # 检查你的数据库。或者使用 pgadmin III

            【讨论】:

            • 想对此投反对票,然后改变了我的想法,但似乎无法撤消它......无论如何,重点是你应该对所有其他黑客和技巧进行酝酿。 Brew 是一个包manager,它为你解决依赖问题,让你的东西保持最新,还可以让你干净地卸载你不想要的东西。
            猜你喜欢
            • 2012-11-02
            • 1970-01-01
            • 2014-09-18
            • 2011-01-11
            • 2023-03-19
            • 1970-01-01
            • 1970-01-01
            • 2016-01-17
            • 1970-01-01
            相关资源
            最近更新 更多