Monkeypatch модель в грабли задачи, чтобы использовать метод, предоставляемый плагином? - PullRequest
2 голосов
/ 17 апреля 2010

Во время недавнего рефакторинга мы изменили способ хранения пользовательских аватаров, не понимая, что после развертывания это повлияет на всех существующих пользователей. Итак, теперь я пытаюсь написать грабли, чтобы исправить это, выполнив что-то вроде этого.

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 для пользователя: Class

Я могу сделать это в скрипте / консоли, но кажется, что он не может найти методы плагина paperclip из задачи rake.

1 Ответ

2 голосов
/ 17 апреля 2010

задача rake, вероятно, заключается не в загрузке полной среды Rails. Вы можете заставить его сделать это, выполнив что-то вроде этого:

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

где путь ведет к вашему файлу environment.rb. Если это поможет устранить проблему, вам следует включить ее в эту задачу специально, потому что вы, вероятно, не хотите, чтобы все ваши грабли включали среду по умолчанию. На самом деле, грабли, возможно, даже не лучшее место, чтобы делать то, что вы пытаетесь сделать. Вы также можете попробовать создать скрипт в каталоге скриптов.

...