我试图创建一个自定义rake任务,但似乎我没有访问我的模型。 我认为这是一些隐含有轨任务。
我在LIB /任务/ 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
依赖关系添加到任务
您可能需要要求您的配置(应注明您的所有要求的机型等)
例如:
require 'config/environment'
或者你可以只要求每个seperately,但你可能有环境问题,AR没有设置等)
当你开始写你的Rake任务,用生成存根出来给你。
例如:
rails g task my_tasks task_one task_two task_three
你会得到所谓的lib /任务创建存根my_tasks.rake
(显然使用自己的名称空间。),这将是这样的:
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
你所有的轨道模型等,将可用于当前环境的每个任务块中,除非你正在使用的生产环境中,在这种情况下,你需要要求您要使用的具体型号。 任务的身体内做到这一点。 (这个此不同版本的Rails之间变化。)
的:环境的依赖是相当正确地叫了一声,但仍耙可能不知道,你的模型依赖于其他的宝石 - 在我的“ protected_attributes”的一个案例。
答案是运行:
bundle exec rake test:new_task
这保证了环境包括你的Gemfile中指定的任何宝石。
随着新的Ruby语法哈希(Ruby 1.9的)环境将这样被添加到耙任务:
namespace :test do
task new_task: :environment do
puts Parent.all.inspect
end
end
使用以下命令(任务名称命名空间)生成的任务:
rails g task test new_task
使用下面的语法来添加逻辑:
namespace :test do
desc 'Test new task'
task new_task: :environment do
puts Parent.all.inspect
end
end
使用以下命令上述任务运行:
bundle exec rake test:new_task
要么
rake test:new_task