Rmagick在服务器上找不到ImageMagick

6

我正在将一个Rails应用部署到Ubuntu。

Rmagick是通过"bundle install vendor"安装的。它已经安装好了,应用程序也能正常运行,但是会抛出以下错误:

uninitialized constant Image::Magick

尝试读取时:

source_image = Magick::Image.read("#{Rails.root}/public/system/assets/#{self.id}/original/#{self.asset_file_name}").first

我已经完成了以下操作:
  • 在服务器上卸载,然后重新安装ImageMagick
  • 在服务器上卸载,然后重新安装Rmagick
  • 通过Bundler卸载,然后重新安装Rmagick
  • 仅使用Bundler Rmagick运行
  • 使用Bundler和系统自带的Rmagick运行
  • 代理Nginx到Rails服务器以确保错误与Passenger无关
我正在尝试着找到其他解决Rmagick无法识别ImageMagick的方法。

请问您能否展示一下这个错误的堆栈跟踪信息? - Ryan Bigg
谢谢你的提问,Ryan。原来部署该应用程序的人没有在 Gemfile 中对其进行配置,以使其能够在许多环境中运行。 - Jonathan Vanasco
2个回答

39

在经过数小时的奋战和尝试不同的组合重新编译imagemagick和rmagick后,我终于幸运地找到了一个解决方法。

Gemfile

- gem 'rmagick'
+ gem 'rmagick', :require => 'RMagick'

Bundler默认需要gem名称,例如:require => 'rmagick'

但实际上被包含的文件是“RMagick.rb”。对于像OS X这样不区分大小写的文件系统,这将起作用,但对于区分大小写的文件系统(例如Ubuntu),将无法找到该文件。

这可能是为什么即使在生产模式下运行时,也无法在开发系统上生成错误的原因之一。


在感恩节那天发现了这个有用的技巧。非常感谢。 - Wedge Martin
很棒的解决方案。感谢您的解释。OSX的不区分大小写有时让我抓狂。 - Tigraine

0

作为特权用户执行gem install rmagick解决了我的问题。

不是非常有帮助的解决方案,但我想在我的情况下,即使bundler认为我已经安装了RMagick,实际上我并没有正确地安装它。


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