2013-12-09 42 views
34

在分期上,我在通過carrierwave和minimagick上載和調整圖像大小時遇到​​以下錯誤。在本地一切工作正常。Carrierwave,MiniMagick - NoMethodError:未定義方法大小爲零:NilClass

carrierwave(0.9.0) mini_magick(3.7.0)

irb(main):003:0> PicturePost.create(remote_content_url: 'http://www.imagpress.com/img/slider/slider_1.jpg') 
NoMethodError: undefined method `size' for nil:NilClass 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick.rb:24:in `choose_processor' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick.rb:64:in `mogrify?' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:360:in `run_command' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:171:in `valid?' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:140:in `create' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:48:in `read' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:111:in `block in open' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/processing/mini_magick.rb:260:in `manipulate!' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/processing/mini_magick.rb:176:in `resize_to_fill' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:85:in `block in process!' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:81:in `each' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:81:in `process!' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:18:in `block in with_callbacks' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:18:in `each' 
9 levels... 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/download.rb:65:in `download!' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:353:in `remote_url=' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:203:in `remote_content_url=' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/orm/activerecord.rb:44:in `remote_content_url=' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/attribute_assignment.rb:85:in `block in assign_attributes' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/attribute_assignment.rb:78:in `each' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/attribute_assignment.rb:78:in `assign_attributes' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/base.rb:498:in `initialize' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/persistence.rb:44:in `new' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/persistence.rb:44:in `create' 
from (irb):3 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/railties-3.2.15/lib/rails/commands/console.rb:47:in `start' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/railties-3.2.15/lib/rails/commands/console.rb:8:in `start' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/railties-3.2.15/lib/rails/commands.rb:41:in `<top (required)>' 
from script/rails:6:in `require' 

想不通爲什麼發生這種情況。

回答

53

忘了在我的新服務器上安裝imagemagick。 這解決了這個問題對我來說

sudo apt-get install imagemagick 
+1

謝謝你,它只是解決了我的問題:d –

+1

非常感謝這個! – YoniGeek

+1

你可能只是救了我幾個小時!感謝您回答您的問題,+1 –

2

看起來像是mini_magick 3.7.0的問題。看看這個issue

1

如果使用yum包管理器(像我的AWS Opsworks)。你可以做

yum install ImageMagick 

注:ImageMagick的拼寫爲駝峯

6

時MiniMagick查找命令mogrifygm並未能找到任何一個出現此錯誤。

作爲另一個答覆中提到,您需要確保的ImageMagick或GraphicsMagick工具安裝的命令如

sudo apt-get install imagemagick 

但是,也可能會出現此問題,如果安裝在非標準位置的ImageMagick並且在Rails進程的路徑中不可用。例如,如果您從源安裝到/usr/local/bin,那麼該位置可能不在路徑上。在這種情況下,以確保您的路徑設置正確,此行添加到application.rbenvironments/production.rb,或其他一些合適的地方:

ENV['PATH'] += File::PATH_SEPARATOR + '/usr/local/bin' 

請注意,您的路徑可能取決於應用程序的啓動方式是不同的,例如從命令行與系統初始化文件相比,添加這樣一行對確保MiniMagick在任何情況下都能正常工作非常重要。

在Linux下,您可以通過查找pid來查看正在運行的Rails進程的路徑,然後查看/proc/<pid>/environ

0

如果您使用某個IDE,那麼只需重新啓動IDE即可解決該問題。我花了很多時間試圖爲這個問題找到解決方案。而這個簡單的操作爲我工作。

+0

在開發環境中這可能是一個奇怪的問題,但他說問題只發生在分期而不是發展。可能在分期中他使用'nano',''vim'或其他代碼編輯器,但不是IDE。 – markets

0

對於其他正在使用Rails並使用mini_magick的人,請將您的gemfile中的版本更改爲3.5,因爲使用mini_magick進行圖片上傳時3.6已損壞,並且不適用於3.7版本。

+0

降級到3.5會導致:Errno :: ENOENT - 沒有這樣的文件或目錄 - 識別 –

2

家釀&約塞米蒂中心答:

http://thornelabs.net/2014/12/08/libpng-not-symlinking-when-installing-imagemagick-on-os-x-yosemite.html

當然,你需要重新安裝ImageMagick的,但如果運行

brew install imagemagick 

給你喜歡的錯誤:

Error: The `brew link` step did not complete successfully 
The formula built, but is not symlinked into /usr/local 
Could not symlink share/man/man5/png.5 
/usr/local/share/man/man5 is not writable. 
... 

首先,檢查您的用戶名有

ls -al /usr/local/share/man 

權限,如果你不這樣做,你需要運行

sudo chown -R yourusername /usr/local/share/man/man5 
brew link libpng 

希望這可以節省一些人小時。

-B

相關問題