2

我刚刚升级到 Snow Leopard,包括安装新的 XCode、重新编译 Ruby 1.8 和 MySQL。我的 Rails 应用程序在更新后的环境中运行良好,除了一些依赖于 ImageScience/FreeImage 的图像处理功能。

我将 MacPorts 升级到 1.8,删除了所有以前安装的端口并在 1.8 中重新安装它们,我假设它会安装 64 位版本的端口,包括 FreeImage。我还使用以下命令将 image_science 和 RubyInline 重新安装为 64 位 gem:

sudo env ARCHFLAGS="-arch x86_64" gem install RubyInline image_science

现在,当我在需要图像处理的页面上运行我的应用程序时,我的日志中出现此错误:

加载 ImageScienceProcessor 时出现问题:dlopen(/myappname/config/initializers/../tmp/.ruby_inline/Inline_ImageScience_cdab.bundle, 9):找不到合适的图像。确实找到了:/myappname/config/initializers/../tmp/.ruby_inline/Inline_ImageScience_cdab.bundle:mach-o,但架构错误 - /myappname/config/initializers/../tmp/.ruby_inline/Inline_ImageScience_cdab.bundle

有人可以帮我看看这个错误告诉我什么吗?

4

4 回答 4

1

我遇到了同样的问题,需要为 64 位(雪豹)环境重新安装一些 gem 依赖项(尤其是基于 C 的依赖项)。我为此使用了 ruby​​ 控制台。这是我所做的:

$ irb
  irb> `gem list`.each_line {|line| `sudo env ARCHFLAGS="-arch x86_64" gem install #{line.split.first}`}
于 2009-09-04T07:22:12.717 回答
0

我最近遇到了一个类似的问题,在启动 rails 控制台或 rails 服务器时,rails 抛出“但错误的架构没有找到合适的图像”错误。

在关联的 .dylib 文件和 gem 上运行file通常会返回适用的 x86_64 版本或包含它的通用版本。最终,我将其追溯到我正在运行的 Ruby 的实际版本。/usr/bin/ruby 可执行文件本身仅与 i386 兼容。这真是令人震惊,因为我认为新的 xcode 和 osx 10.7 会给我带来 64 位 ruby​​。

使用 RVM,我安装了另一个 ruby​​ 实例(同样是 1.8.7)。这样做需要我安装一个新的 readline 实例(为此我使用了自制软件,: brew install readline)并安装了带有rvm install 1.8.7 --with-readline-dir=/usr/local/Cellar/readline/6.2.1/.

完成此操作并切换到使用我的新ruby​​ 实例rvm use 1.8.7gem install rakegem install bundlerbundle install

长话短说,确保你的 ruby​​ 可执行文件与你的 ruby​​/rails 包内置的指令集版本相匹配。

于 2011-09-29T22:02:23.047 回答
0

它报告说它试图执行一些本机代码,这些代码采用正确的可执行格式,但架构错误。这可能意味着 gem 版本和正在运行的内核之间仍然存在不匹配,或者在您仍然安装旧操作系统时创建的一些临时代码仍然存在。两种可能的解决方案可能是:

  1. 备份您的应用程序,找到有问题的“.ruby_inline”目录并将其删除,然后重试。
  2. 找出 "RubyInline" 和 "image_science" gem 的安装位置(例如 gem list -d image_science)并检查它们的原生部分(通常是 gems//lib 或类似的东西,那些在 "bin" 或带有 " .so" 扩展名)匹配您的内核。您可以使用“文件”工具检查文件是 32 位还是 64 位可执行文件(只需调用file filename)。
于 2009-09-02T17:32:36.507 回答
0

在完成了上面提到的 colins peters(重新安装 64 位 gems 的代码)之后,我还必须更改我的 IDE 正在寻找 gems 的目录。由于 RubyMine 没有为我做,或者我没有找到它,所以我这样做了:

cd ~/.gem/ruby/1.8/
rm -r gems
ln -s /Library/Ruby/Gems/1.8/gems gems
于 2009-11-04T22:22:20.443 回答