雪豹/ 64位rubygem问题?
我刚刚升级到Snow Leopard,包括安装新的XCode,重新编译了Ruby 1.8和MySQL。 我的Rails应用程序在更新的环境中运行良好,除了一些依赖于ImageScience / FreeImage的图像处理function。
我将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
有人可以帮我解决这个错误告诉我的内容吗?
它报告说它试图执行一些本机代码,这些代码采用正确的可执行格式,但是对于错误的架构。 这可能意味着gem版本和正在运行的内核之间仍然存在不匹配,或者当您仍然安装了旧操作系统时创建的一些临时代码仍然存在。 两种可能的解决方案可能是
- 备份您的应用程序,找到有问题的“.ruby_inline”目录并将其删除,然后重试。
- 找出安装“RubyInline”和“image_science”gem的位置(例如gem list -d image_science)并检查它们的原生部分(通常是gem中的那些// lib或类似的东西,“bin”中的那些或带有“ .so“扩展名”匹配你的内核。 您可以使用“文件”工具检查文件是32位还是64位可执行文件(只需调用
file filename
)。
我有同样的问题,需要为64位(雪豹)环境重新安装一些gem依赖项(特别是基于C的依赖项)。 我使用了ruby控制台。 这是我做的:
$ irb irb> `gem list`.each_line {|line| `sudo env ARCHFLAGS="-arch x86_64" gem install #{line.split.first}`}
在完成上面提到的colins peters(重新安装64位gem的代码)之后,我还必须更改我的IDE寻找gem的目录。 由于RubyMine没有为我做,或者我没有找到它,我这样做:
cd ~/.gem/ruby/1.8/ rm -r gems ln -s /Library/Ruby/Gems/1.8/gems gems
我最近有一个类似的问题,当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实例(我使用homebrew,: brew install readline
)并安装了rvm和rvm install 1.8.7 --with-readline-dir=/usr/local/Cellar/readline/6.2.1/
。
执行此操作后,切换到使用我的新ruby实例( rvm use 1.8.7
),我的所有gem都消失了(RVM安装以某种方式改变了我的默认gem_path。) gem install rake
,然后是gem install bundler
,然后是bundle install
让我起来跑步。
简而言之,请确保您的ruby可执行文件与您的ruby / rails软件包内置的指令集版本相匹配。