在最近的一些重构中,我们更改了用户头像的存储方式,但没有意识到一旦部署它就会影响所有现有用户。所以现在我正在尝试编写一个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':Class
我可以在脚本/控制台中执行此操作,但似乎无法从rake任务中找到paperclip插件的方法。
答案 0 :(得分:2)
rake任务可能没有加载完整的Rails环境。您可以通过执行以下操作来强制执行此操作:
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
路径指向您的environment.rb文件。如果要解决此问题,则应将其专门包含在此任务中,因为您可能不希望默认情况下所有rake任务都包含环境。事实上,rake任务可能甚至不是你想要做的事情的最佳场所。您也可以尝试在脚本目录中创建脚本。