43

User テーブルにユーザーを追加する 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="bob@example.com"
    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 モデル クラスにアクセスできるようにするには、どうすればよいですか?

4

1 に答える 1

102

あなたは近いです:)

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

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

于 2011-03-10T19:49:52.360 に答える