不要轨Rake任务提供访问ActiveRecord的模式?不要轨Rake任务提供访问ActiveRe

2019-05-12 21:37发布

我试图创建一个自定义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)

有任何想法吗? 谢谢

Answer 1:

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

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

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



Answer 2:

您可能需要要求您的配置(应注明您的所有要求的机型等)

例如:

require 'config/environment'

或者你可以只要求每个seperately,但你可能有环境问题,AR没有设置等)



Answer 3:

当你开始写你的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之间变化。)



Answer 4:

的:环境的依赖是相当正确地叫了一声,但仍耙可能不知道,你的模型依赖于其他的宝石 - 在我的“ protected_attributes”的一个案例。

答案是运行:

bundle exec rake test:new_task

这保证了环境包括你的Gemfile中指定的任何宝石。



Answer 5:

随着新的Ruby语法哈希(Ruby 1.9的)环境将这样被添加到耙任务:

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


Answer 6:

使用以下命令(任务名称命名空间)生成的任务:

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


文章来源: Do rails rake tasks provide access to ActiveRecord models?