關於Imagemagick 討論


#1

Imagemagick 在Ruby 世界裡面我知道的有兩種gem 在 support, Rmagick 跟 Minimagick,比較麻煩的是當我使用CarrierWave 的時候呈現了這種問題

[2] pry(#<Admin::VariantsController>)> variant.images[0].asset.path
=> "/e-commerce/public/uploads/image/asset/911103749/image0.png"
[3] pry(#<Admin::VariantsController>)> variant.images[0].asset.width
Errno::ENOENT: No such file or directory @ rb_sysopen - /uploads/image/asset/911103749/image0.png
from /usr/local/lib/ruby/2.4.0/open-uri.rb:37:in `initialize' 

原因是因為在CarrierWave裡,Default path 也就是

# lib/carrierwave.rb
CarrierWave.root = Rails.root.join(Rails.public_path).to_s

然後當我們使用width 時

    def width
      mini_magick_image[:width]
    end
 ====================
   def mini_magick_image
       if url
          ::MiniMagick::Image.open(url)
       else
          ::MiniMagick::Image.open(current_path)
       end
   end

url != curreunt_path 所以拿到這樣的Error.


#2

看起來只是你給的 url 是 / 開頭的,所以他從系統的 root 開始搜尋:

Errno::ENOENT: No such file or directory @ rb_sysopen - /uploads/image/asset/911103749/image0.png

表示根目錄下沒有 /uploads/image/asset/911103749/image0.png 這個檔案,而不是從專案目錄開始找