无法安装pg gem,"mkmf.rb无法找到ruby的头文件"(Mac OSX 10.6.5)

npu*_*pup 21 ruby postgresql rubygems ruby-on-rails

我刚刚升级到Rails 3并且对MacPorts,宝石和数据库进行了一些混乱.我抛弃了所有的宝石并将它们安装得很新鲜.除了pg gem的要求外,一切似乎都没问题.

创建一个为PostgreSQL准备的新Rails 3项目后,服务器无法启动,抱怨丢失的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
Run Code Online (Sandbox Code Playgroud)

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

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

指针是受欢迎的.任何遗漏的信息都有助于搞清楚这一点,我会很乐意并及时提供!


我下载了XCode,因为据说DVD版本已经坏了,而且事情会好一段时间.bundle install开始谈论"archflags",所以我做了:

sudo env ARCHFLAGS="-arch i386" bundle install
Run Code Online (Sandbox Code Playgroud)

事情似乎没事,直到开始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
Run Code Online (Sandbox Code Playgroud)

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 ***
Run Code Online (Sandbox Code Playgroud)

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

Yut*_*uta 32

当我尝试在CentOS 6.3上安装gem时遇到了这个错误.

谷歌搜索后,我找到了一个快速修复:安装ruby-devel包.

sudo yum install ruby-devel
Run Code Online (Sandbox Code Playgroud)

在那之后,一切都很好.

  • 那也对我有用。但是在Ubuntu 15.10中,其`sudo apt install ruby​​-dev` (2认同)

the*_*Man 11

一般来说,Postgres的gem包想知道pg_config隐藏在哪里,所以他们可以询问Postgres的安装情况.

使用locate pg_config,看看你的Mac知道在那里的藏身.

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

/Applications/mappstack-1.2-3/postgresql/bin/pg_config
Run Code Online (Sandbox Code Playgroud)

另一个在:

/Library/PostgreSQL/9.0/bin/pg_config
Run Code Online (Sandbox Code Playgroud)

我不记得安装了那个/Library/PostgreSQL/9.0,所以它可能是由Snow Leopard预装的,或者我是在受到太多工作的影响下完成的,可能是使用EnterpriseDB的Postgres安装程序.

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

export SQL_PATH=/Library/PostgreSQL/9.0
gem install pg -- --with-pg-config=$SQL_PATH/bin/pg_config
Run Code Online (Sandbox Code Playgroud)

并尝试安装.如果其中任何一个工作你就完成了.除此以外...

安装程序可能想要的下一件事是访问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
Run Code Online (Sandbox Code Playgroud)

希望这一切都有所帮助.我使用mappstack Postgres和EnterpriseDB版本运行Rails 3和我的Postgres运行正常,所以上面的信息可以帮助你.


Pau*_*ell 10

这对我来说在OS X 10.6.6上运行,从源代码安装了PostgreSQL 9.0.1:

export PATH=/usr/local/psql/bin:$PATH
export ARCHFLAGS='-arch x86_64'
gem install pg
Run Code Online (Sandbox Code Playgroud)

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