ユーザーをユーザーテーブルに追加するRuby(1.9.2)-on-Rails(3.0.5)rakeタスクを定義します。ファイルは次のようになります。
#lib/tasks/defaultuser.rake
require 'rake'
namespace :defaultuser do
task :adduser do
u=User.new
u.email="[email protected]"
u.password="password"
u.save
u.errors.each{|e| p e}
end
end
次に、次のようにタスクを呼び出します
> rake defaultuser:adduser
Railsコンソールの:adduserタスクでコードをテストしましたが、正常に動作します。実行しているのはrakeタスクだけです。
print "defaultuser:adduser"
タスクの本文で、それはうまくいきました。
しかし、組み合わせてみると、
rake aborted!
uninitialized constant User
私が試した
require File.expand_path('../../../app/models/user.rb', __FILE__)
rakeファイルの名前空間定義の上にありますが、それは機能しませんでした。わかった
rake aborted!
ActiveRecord::ConnectionNotEstablished
Railsコンソールにあるのと同じように、RakeタスクのUserモデルクラスにアクセスできるようにするには、何をする必要がありますか?
あなたは近いです:)
#lib/tasks/defaultuser.rake
require 'rake'
namespace :defaultuser do
task :adduser => :environment do
...
end
:environmentの使用に注意してください。これは、rakeタスクを呼び出す前に必要なRails環境をセットアップします。その後、ユーザーオブジェクトがスコープ内になります。