2

最近のいくつかのリファクタリング中に、ユーザー アバターの保存方法を変更しましたが、一度展開すると既存のすべてのユーザーに影響を与えることに気づきませんでした。だから今、私はこのようなことをしてこれを修正するためのレーキタスクを書こうとしています。

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

それを実行しようとすると、 User:Class の未定義のメソッド `has_attached_file' が取得されます

スクリプト/コンソールでこれを行うことができますが、rake タスクから paperclip プラグインのメソッドを見つけることができないようです。

4

1 に答える 1

2

rake タスクはおそらく完全な Rails 環境をロードしていません。次のようなことを行うことで、強制的に実行できます。

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

パスは environment.rb ファイルにつながります。これで問題が解決する場合は、特にこのタスク内に含める必要があります。これは、すべての rake タスクにデフォルトで環境を含めたくない可能性があるためです。実際、rake タスクは、あなたがしようとしていることを実行するのに最適な場所でさえないかもしれません。script ディレクトリにスクリプトを作成することもできます。

于 2010-04-17T15:42:50.570 に答える