ruby on rails - rails - ¿Las tareas de rake rieles proporcionan acceso a los modelos ActiveRecord?




whenever ruby on rails (4)

Estoy tratando de crear una tarea de rastrillo personalizada, pero parece que no tengo acceso a mis modelos. Pensé que esto era algo implícitamente incluido en la tarea de rieles.

Tengo el siguiente código en lib / tasks / test.rake:

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

Y aquí es cómo se ve mi modelo de padre:

class Parent < ActiveRecord::Base
  has_many :children
end

Es un ejemplo bastante simple, pero me sale el siguiente error:

/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent

(See full trace by running task with --trace)

¿Algunas ideas? Gracias


Con la nueva sintaxis de hash ruby ​​(Ruby 1.9), el entorno se agregará así a la tarea de rake:

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

Cuando comience a escribir sus tareas de rake , use un generador para apagarlas por usted.

Por ejemplo:

rails g task my_tasks task_one task_two task_three 

Obtendrás un código auxiliar creado en lib / tasks llamado my_tasks.rake (obviamente, usa tu propio espacio de nombres) que se verá así:

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

Todos los modelos de rieles, etc. estarán disponibles para el entorno actual desde cada bloque de tareas, a menos que esté utilizando el entorno de producción , en cuyo caso deberá requerir los modelos específicos que desea usar. Haz esto dentro del cuerpo de la tarea. (IIRC esto varía entre las diferentes versiones de Rails.)


La dependencia del entorno se llama correctamente, pero es posible que el rake aún no sepa sobre otras gemas de las que dependen sus modelos, en uno de mis casos, "protected_attributes".

La respuesta es correr:

bundle exec rake test:new_task

Esto garantiza que el entorno incluya las gemas especificadas en su Gemfile.


Lo descubrí, la tarea debería verse como:

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

Observe la dependencia del => :environment agregada a la tarea





task