Rails Rake任务 - 访问模型类

时间:2011-03-10 19:45:50

标签: ruby-on-rails rake-task

我想定义一个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模型类具有相同的访问权限?

1 个答案:

答案 0 :(得分:96)

你很亲密:)

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

注意使用:environment,它在调用rake任务之前设置必要的Rails环境。之后,您的User对象将在范围内。