2011-03-10 86 views
36

我想定義一個將用戶添加到User表的Ruby(1.9.2)-on-Rails(3.0.5)rake任務。該文件是這樣的:Rails 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 aborted! 
ActiveRecord::ConnectionNotEstablished 

我需要做什麼以便我在Rails任務中擁有對Rails任務中User模型類的相同訪問權限?

+0

類似的問題:[?難道軌耙任務提供訪問ActiveRecord的模式] [1] [1]:http://stackoverflow.com/questions/876396/do-rails-rake-tasks -provide-access-to-activerecord-models – 2012-05-07 03:54:21

回答

91

你接近:)

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

的使用注意事項的:環境,其中規定了在調用rake任務所需的Rails環境。之後,你的用戶對象將在範圍內。

+3

Ahhhhhhhhhhhhh!我很接近。我沒有得到語法。 – 2011-03-10 20:11:30

+0

http://jasonseifer.com/2010/04/06/rake-tutorial本教程闡述了該問題的更多細節,並展示了一個很好的參數化rake任務的方法。 – 2011-03-10 20:50:11