web-dev-qa-db-ja.com

Rails Rake Task-モデルクラスへのアクセス

ユーザーをユーザーテーブルに追加する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モデルクラスにアクセスできるようにするには、何をする必要がありますか?

42
Jay Godse

あなたは近いです:)

#lib/tasks/defaultuser.rake
require 'rake'
namespace :defaultuser do
  task :adduser => :environment do
    ...
  end

:environmentの使用に注意してください。これは、rakeタスクを呼び出す前に必要なRails環境をセットアップします。その後、ユーザーオブジェクトがスコープ内になります。

100
tobinharris