【发布时间】: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/ruby,ruby -v 说ruby 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