2

在最近的一些重构中,我们改变了用户头像的存储方式,没有意识到一旦部署它会影响所有现有用户。所以现在我正在尝试编写一个 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 任务中找到回形针插件的方法。

4

1 回答 1

2

rake 任务可能没有加载完整的 Rails 环境。您可以通过执行以下操作强制它这样做:

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

路径指向您的 environment.rb 文件的位置。如果这是为了解决问题,您应该将它专门包含在此任务中,因为您可能不希望所有 rake 任务默认包含环境。事实上,一个 rake 任务甚至可能不是做你想做的事情的最佳场所。您也可以尝试在脚本目录中创建一个脚本。

于 2010-04-17T15:42:50.570 回答