Carrierwave #Resize_to_fill不使用Minimagick(仅适用于rMagick)

时间:2017-02-12 06:28:47

标签: ruby-on-rails carrierwave image-resizing rmagick minimagick

我将rails应用配置为使用Carrierwave进行图片上传。根据文档,我为多文件上传包含了适当的gem版本。在Carrierwave上传器中,我加入了Minimagick。当我尝试使用 #resize_to_fill 方法时,出现以下错误,上传失败:

ActiveRecord::RecordInvalid: Validation failed: Images translation missing: en.errors.messages.mini_magick_processing_error

但是,当我从Minimagick切换到Rmagick时,它的效果非常好吗?如果可能的话,我更愿意使用Minimagick。另一个奇怪的事情是像#resize_to_fit这样的其他方法与Minimagick和Rmagick完美配合。有谁有这个问题???

以下是重要文件:

的Gemfile

gem 'rails',                   '5.0.1'
gem 'bcrypt',                  '3.1.11'
gem 'faker',                   '1.6.6'
gem 'carrierwave',              github: 'carrierwaveuploader/carrierwave'
gem 'mini_magick',             '4.5.1'
# gem 'rmagick',              '~> 2.15', '>= 2.15.4'
gem 'fog',                     '1.38.0'
gem 'will_paginate',           '3.1.0'
gem 'bootstrap-will_paginate', '0.0.10'
gem 'bootstrap',            '~> 4.0.0.alpha6'

source 'https://rails-assets.org' do
  gem 'rails-assets-tether', '>= 1.3.3'
end

gem 'puma',                    '3.4.0'
gem 'pg',   '0.18.4'
gem 'sass-rails',              '5.0.6'
gem 'uglifier',                '3.0.0'
gem 'coffee-rails',            '4.2.1'
gem 'jquery-rails',            '4.1.1'
gem 'turbolinks',              '5.0.1'
gem 'jbuilder',                '2.4.1'

group :development, :test do
  gem 'byebug',  '9.0.0', platform: :mri
end

group :development do
  gem 'web-console',           '3.1.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '1.7.2'
  gem 'spring-watcher-listen', '2.0.0'
end

group :test do
  gem 'rails-controller-testing', '0.1.1'
  gem 'minitest-reporters',       '1.1.9'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end

上传/ images_uploader.rb

class ImagesUploader < CarrierWave::Uploader::Base
  # Include RMagick or MiniMagick support:

  # include CarrierWave::RMagick (only this one works)
  include CarrierWave::MiniMagick

  process resize_to_fill: [900, 600]

  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end

Minimagick和Rmagick都应该支持 #resize_to_fill 根据文档以及我在网上看过的很多例子。我也试过使用Carrierwave和Minimagick的不同版本,但没有任何效果。我也尝试重新安装Imagemagick。仍然没有。

有人可以帮忙!另外,如果我不能让Minimagick工作,Rmagick真的那么糟糕吗?人们真的反对我所看到的。谢谢!

2 个答案:

答案 0 :(得分:0)

也许为时已晚。 但是我已经面临这个问题。 要解决它,您应该:

  1. 使用前请确保已安装 ImageMagick Mini_magick
  2. 重新启动计算机。

然后它起作用了。

答案 1 :(得分:-1)

如果您要通过远程网址添加图片,可能还会验证您是否使用了指向图片的直接链接,例如,云应用中缩短的网址可能无效。