雪豹/ 64位红宝石宝石问题?

时间:2009-09-02 12:25:13

标签: ruby-on-rails image-processing rubygems osx-snow-leopard

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

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

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 个答案:

答案 0 :(得分:1)

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

$ irb
  irb> `gem list`.each_line {|line| `sudo env ARCHFLAGS="-arch x86_64" gem install #{line.split.first}`}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

cd ~/.gem/ruby/1.8/
rm -r gems
ln -s /Library/Ruby/Gems/1.8/gems gems

答案 3 :(得分:0)

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

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

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

执行此操作后,切换到使用我的新ruby实例(rvm use 1.8.7),我的所有宝石都消失了(RVM安装以某种方式更改了我的默认gem_path。)gem install rake,然后是{{1 }},然后gem install bundler让我振作起来。

简而言之,请确保您的ruby可执行文件与您的ruby / rails软件包内置的指令集版本相匹配。