我想定义一个Ruby(1.9.2)-on-Rails(3.0.5)rake任务,它将用户添加到User表中。该文件如下所示:
#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模型类具有相同的访问权限?
答案 0 :(得分:96)
你很亲密:)
#lib/tasks/defaultuser.rake
require 'rake'
namespace :defaultuser do
task :adduser => :environment do
...
end
注意使用:environment,它在调用rake任务之前设置必要的Rails环境。之后,您的User对象将在范围内。