2010-04-17 48 views
2

在最近的一些重構過程中,我們改變了我們的用戶頭像存儲的方式,沒有意識到一旦部署就會​​影響所有的現有用戶。所以現在我試圖編寫一個rake任務來解決這個問題。Monkeypatch rake任務中的模型使用插件提供的方法?

namespace :fix do 

    desc "Create associated ImageAttachment using data in the Users photo fields" 
    task :user_avatars => :environment do 
    class User  
     # Paperclip 
     has_attached_file :photo ... <paperclip stuff, styles etc> 
    end 

    User.all.each do |user| 
     i = ImageAttachment.new 
     i.photo_url = user.photo.url 
     user.image_attachments << i 
    end  
    end 

end 

,當我嘗試運行,雖然我得到了用戶未定義的方法`has_attached_file」:類

我能夠做到這一點的腳本/控制檯,但現在看來似乎無法找到來自rake任務的回形針插件的方法。

回答

2

rake任務可能不會加載完整的Rails環境。你可以通過這樣做來強制它這樣做:

require File.expand_path(File.dirname(__FILE__) + "/../config/environment") 

其中路徑通向你的environment.rb文件。如果要解決該問題,則應該將其專門包含在此任務中,因爲您可能不希望所有rake任務默認包含環境。事實上,一個耙子任務甚至可能不是您嘗試做的最好的地方。您也可以嘗試在腳本目錄中創建一個腳本。

+0

感謝您的幫助。這工作。 我需要能夠在測試時指定RAILS_ENV。我不知道如何用腳本來做到這一點。 這裏的腳本有什麼優勢? – gduq 2010-04-17 20:15:08