需要使用RMagick gem与Ruby解决问题

3

我在Windows系统上成功安装了RMagick,但是在使用过程中遇到了问题。具体来说:

C:\Users\dancrumb> ruby -rubygems -rRMagick -e "puts Magick::Long_version"
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:900:in `report_activate_error':
RubyGem version error: rmagick(2.12.0 not >= 0) (Gem::LoadError)
        from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:248:in `activate'
        from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:212:in `rescue in try_activate'
        from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:209:in `try_activate'
        from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:57:in `rescue in require'
        from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'

主要的问题是似乎不合逻辑的错误信息:RubyGem版本错误:rmagick(2.12.0不是>= 0)。除非我漏了什么,2.12.0肯定大于0。
一些有用的信息:
C:\Users\dancrumb>gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.6.2
  - RUBY VERSION: 1.9.2 (2010-12-25 patchlevel 136) [i386-mingw32]
  - INSTALLATION DIRECTORY: C:/Ruby192/lib/ruby/gems/1.9.1
  - RUBY EXECUTABLE: C:/Ruby192/bin/ruby.exe
  - EXECUTABLE DIRECTORY: C:/Ruby192/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-mingw32
  - GEM PATHS:
     - C:/Ruby192/lib/ruby/gems/1.9.1
     - C:/Users/dancrumb/.gem/ruby/1.9.1
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

C:\Users\dancrumb>dir \Ruby192\lib\ruby\gems\1.9.1\gems
 Volume in drive C is TI106036W0F
 Volume Serial Number is 4432-A499

 Directory of C:\Ruby192\lib\ruby\gems\1.9.1\gems

...
03/26/2011  01:34 PM    <DIR>          rmagick-2.12.0-x86-mswin32
...
03/20/2011  08:06 PM    <DIR>          rubygems-update-1.6.2
...

提供的README文件和与RMagick相关的论坛都没有提供任何有用的信息。
更奇怪的是:
C:\Users\dancrumb>ruby -rubygems -e "gem 'rmagick', '2.12.0'; puts Magick::Long_
version"
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:900:in `report_activate_error':
RubyGem version error: rmagick(2.12.0 not = 2.12.0) (Gem::LoadError)
        from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:248:in `activate'
        from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:1276:in `gem'
        from -e:1:in `<main>'

除了关于RMagick的具体问题外,有人能为我提供版本错误的合理解释吗?对我来说似乎很荒谬,但也许它实际上传达了一些有用的信息...只是以一种疯狂的方式。


通常,奇怪的>=0错误涉及平台/体系结构问题,根据我的经验。你是在跨平台工作吗?还有,问一个愚蠢的问题,你是否安装了ImageMagick? - issa marie tseng
@Clint。跨平台不起作用...这都是在Windows笔记本电脑上进行的本地开发,之后才上传到服务器。 - Dancrumb
@Clint。这不是一个愚蠢的问题。我已经安装了ImageMagick,并且它是捆绑在RMagick包RMagick-2.12.0-ImageMagick-6.5.6-8-Q8.zip中的ImageMagick版本。 - Dancrumb
3个回答

6
我在Ruby 1.8.7和你在1.9.1中遇到了同样的问题,以下是我解决它的方法:
  1. 如果已经安装了rmagick gem,请卸载它(gem uninstall rmagick)
  2. 下载http://rubyforge.org/frs/download.php/64917/RMagick-2.12.0-ImageMagick-6.5.6-8-Q8.zip
  3. 将zip文件解压到单独的文件夹中(例如C:\ temp \ rmagick)
  4. 安装ImageMagick-6.5.6-8-Q8-windows-dll.exe
  5. 将rmagick-2.12.0-x86-mswin32.gem解压缩到单独的文件夹中(例如C:\ temp \ rmagick \ gem)
  6. 将data.tar.gz提取到单独的文件夹中(例如C:\ temp \ rmagick \ gem \ data)
  7. 打开rmagick.gemspec并删除带有s.platform =“mswin32”的行
  8. 使用“gem build rmagick.gemspec”再次构建gem(会生成一个“rmagick-2.12.0.gem”)
  9. 使用“gem install rmagick --local”进行安装。

2
输入以下内容:
ruby --version

如果它的输出类似于:
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

它的意思是Ruby是使用mingw32构建的,而RMagick不支持该构建方式。虽然RMagick-2.12.0-ImageMagick-6.5.6-8-Q8包的README.html在先决条件中说要安装通过One-Click Installer安装的Ruby 1.8.6,但最新的One-Click Installer也是使用mingw32构建的,这就造成了问题。

1

看了一下rubygems的源代码,似乎rmagick由于某种原因对rubygems关于其版本的查询做出了错误的响应;不确定是什么原因。

当您没有提供特定的版本号时,rubygems将退回到>= 0作为其version_requirements

相反,尝试更加明确地指定版本号,以便版本完全匹配:

ruby -rubygems -e "gem 'rmagick', '2.12.0'; puts Magick::Long_version"

谢谢 Clint,我已经在问题中添加了更多信息,以展示它是如何失败的。 - Dancrumb
哈,这很奇怪。恐怕我已经没有更多的想法了。也许尝试使用 gem bundler 来锁定 gem 版本并为您管理它? - issa marie tseng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接