Ruby on rails 未能安装pg gem,“;mkmf.rb可以';“找不到ruby的头文件”;(Mac OSX 10.6.5)

Ruby on rails 未能安装pg gem,“;mkmf.rb可以';“找不到ruby的头文件”;(Mac OSX 10.6.5),ruby-on-rails,ruby,postgresql,rubygems,Ruby On Rails,Ruby,Postgresql,Rubygems,我刚升级到Rails 3,需要整理的MacPorts、gems和数据库有点乱。我扔掉了所有的宝石,重新安装。除了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::Instal

我刚升级到Rails 3,需要整理的MacPorts、gems和数据库有点乱。我扔掉了所有的宝石,重新安装。除了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
在为PostgreSQL创建了一个新的Rails 3项目之后,服务器无法启动,因为它抱怨缺少pg gem。在进行
捆绑安装时
,它运行了一段时间,当然在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开发工具。它们已经存在了,但我还是重新安装了它们,没有比上面更好的结果

哪个ruby
/usr/bin/ruby
ruby-v
ruby 1.8.7(2009-06-12补丁级别174)[universal-darwin10.0]
,如果有任何线索的话

欢迎指点。任何有助于解决这一问题的缺失信息,我将乐意并及时提供


我下载了XCode,因为据说DVD版本已经坏了,事情好了一段时间
bundle安装
开始谈论“archflags”,所以我:

sudo env ARCHFLAGS="-arch i386" bundle install
事情似乎进展顺利,直到起跑轨呕吐,说:

/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
为了解决任何问题,我尝试了
捆绑安装
,并将archflags设置为
-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是我现在必须通过一些标志提供的路径吗?还是我完全出去吃午饭了?

您可能想尝试一下安装postgres(
brew安装postgres
)以及安装和维护ruby和ruby gems


它将保留您的默认版本(与OSX一起安装)不变,并为您提供更大的灵活性。例如,您可以在同一个系统上安装使用rails 2或3以及ruby 1.8.7和1.9.2的不同rails应用程序,这些应用程序都可以毫无问题地安装在同一个系统上。

一般来说,Postgres的gem bundle想要知道
pg_config
的隐藏位置,以便他们可以询问Postgres的安装情况

使用
locate pg_config
查看你的Mac电脑是否知道它藏在哪里

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

/Applications/mappstack-1.2-3/postgresql/bin/pg_config
另一个网址是:

/Library/PostgreSQL/9.0/bin/pg_config

我不记得在
/Library/PostgreSQL/9.0
上安装了一个,所以它可能是雪豹预先安装的,或者是我在受太多工作影响时安装的,可能是使用了来自的Postgres安装程序

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

然后尝试安装。如果你完成了这两项工作中的任何一项。否则

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

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

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版本,因此上述信息应该可以帮助您达到目的。

这在OS X 10.6.6上对我很有效,PostgreSQL 9.0.1是从源代码安装的:

export PATH=/usr/local/psql/bin:$PATH
export ARCHFLAGS='-arch x86_64'
gem install pg
您可能需要编辑该路径以匹配您的postgres安装位置


一般来说,Postgres的gem bundle想要知道pg_config隐藏在哪里

对-这可能是个骗局。如果您刚刚安装了PostgreSQL并将其添加到path中,并且在旧shell中进行了“捆绑安装”,那么它将无法找到pg_config。如果是这种情况,只需获取一个新的shell并重试。否则,请按照上面的步骤找到它并让bundler看到它


适用于postgresql83的macports安装可以很好地使用rails,这是另一种方法。

我今晚花了很多时间让它正常工作。我看到了与此类似的错误:

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——强制安装1.9.2)。不确定这是否有帮助,但如果您仍然遇到问题,可能值得一试。我已经通过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
sudo env ARCHFLAGS="-arch x86_64" gem install pg

祝你好运

我在CentOS 6.3上尝试通过gem安装rails时遇到了这个错误

在谷歌搜索了一下之后,我找到了一个快速修复方法:安装ruby-devel包

sudo yum install ruby-devel
在那之后,一切都很顺利。

这对我来说很有效:

gem install pg -- --with-pg-lib=/opt/local/lib/postgresql90 --with-pg-include=/opt/local/include/postgresql90
sudo env ARCHFLAGS="-arch x86_64" gem install pg

在我在CentOS 6.6上运行以下程序之前,这里和Web上的所有建议对我来说都是不完整的:

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
安装Postgres.app:

验证安装了什么版本:

$ ls /Library/PostgreSQL/
# 9.4
导出
SQL\u路径

export SQL_PATH=/Library/PostgreSQL/9.4
安装
pg

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

这种错误通常意味着您尚未安装相关软件的开发包,在本例中为PG。DVD上雪豹附带的XCode已损坏,这就是我们需要更新它的原因。雪豹是64位的,因此您必须使用
x86_64
。如果您安装了任何东西并强制执行了
i386
,则需要将其重新编译为
x86\u 64
,否则您将看到收到的消息。这包括在安装Snow Leopard之前编译/安装的所有gems(如果您以前在该机器上运行Leopard)。您需要执行
查找libpq
并找到它所在的位置。它可能位于Postgres安装的
lib
目录中。然后浏览