Rails Rake任务 - 访问模型类

43

我想定义一个 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

我需要做什么,才能在Rake任务中获得与Rails控制台相同的访问用户模型类的权限?


1个回答

102

你离答案很近 :)

#lib/tasks/defaultuser.rake
require 'rake'
namespace :defaultuser do
  task :adduser => :environment do
    ...
  end
注意使用`:environment`,它在调用rake任务之前设置必要的Rails环境。之后,您的User对象将处于范围内。

注意使用:environment,它会在调用rake任务之前设置必要的Rails环境。这样,你的User对象就可以被正确引用了。


3
啊啊啊啊啊!我差点就做对了。但是我不懂语法结构。 - Jay Godse
这个教程更深入地探讨了问题,并展示了一个很好的参数化rake任务的方法。 - Jay Godse
@JayGodse 那个链接现在不幸已经失效了。 - Qqwy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接