做铁轨耙任务提供访问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。