做铁轨耙任务提供访问ActiveRecord模型?

我试图创build一个自定义耙任务,但似乎我没有访问我的模型。 我认为这是隐式地包含在rails任务中的东西。

我在lib / tasks / test.rake中有以下代码:

namespace :test do task :new_task do puts Parent.all.inspect end end 

这里是我的父母模型的样子:

 class Parent < ActiveRecord::Base has_many :children end 

这是一个非常简单的例子,但我得到以下错误:

 /> rake test:new_task (in /Users/arash/Documents/dev/soft_deletes) rake aborted! uninitialized constant Parent (See full trace by running task with --trace) 

有任何想法吗? 谢谢

想通了,任务应该是这样的:

 namespace :test do task :new_task => :environment do puts Parent.all.inspect end end 

注意添加到任务的=> :environment依赖关系

你可能需要你的configuration(它应该指定所有你需要的模型等)

例如:

 require 'config/environment' 

或者你可以单独要求每一个,但你可能有环境问题AR没有build立等)

当你开始写你的耙子任务时,使用一个发生器来为你剔除它们。

例如:

 rails g task my_tasks task_one task_two task_three 

你会得到一个名为my_tasks.rake lib / tasks中创build的存根(显然使用你自己的命名空间)。看起来像这样:

 namespace :my_tasks do desc "TODO" task :task_one => :environment do end desc "TODO" task :task_two => :environment do end desc "TODO" task :task_three => :environment do end end 

除非您使用的是生产环境,否则您的所有导轨模型等将在每个任务块中适用于当前环境,在这种情况下,您需要要求使用特定的模型。 在任务的内部做到这一点。 (IIRC在不同版本的Rails之间有所不同)

:环境依赖是相当正确的调用,但耙仍然可能不知道你的模型所依赖的其他gem – 在我的一个例子中,“protected_attributes”。

答案是运行:

 bundle exec rake test:new_task 

这可以保证环境包括Gemfile中指定的任何gem。