开发者

Monkeypatch a model in a rake task to use a method provided by a plugin?

During some recent refactoring we changed how our user avatars are stored not realizing that once deployed it would affect all the existing users. So now I'm trying to write a rake task to fix this by doing something like this.

namespace :fix do

  desc "Create associated ImageAttachment using data in the Users photo fields"
  task 开发者_Python百科: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

When I try running that though I'm getting undefined method `has_attached_file' for User:Class

I'm able to do this in script/console but it seems like it can't find the paperclip plugin's methods from a rake task.


the rake task is probably not be loading the full Rails environment. You can force it to do so by doing something like this:

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

where the path leads to your environment.rb file. If this were to fix the issue, you should include it inside this task specifically, because you probably do not want all your rake tasks to include the environment by default. In fact, a rake task may not even be the best place to do what you're trying to do. You could try creating a script in the script directory as well.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜