tarea rails job cronjobs ruby rake

ruby - rails - Rake: ¿cómo generar una lista de tareas desde dentro de una tarea?



tarea cron (3)

Me gustaría que mi: tarea predeterminada en un Rakefile sea un mensaje útil que también incluya la lista de tareas disponibles (la salida de rake -T) para las personas que no están tan familiarizadas con el rake.

¿Cómo invocas rake -T desde dentro de una tarea?


Esto es más complicado de lo que mucha gente necesita, pero este programa extraerá tareas de rake de otros archivos de rake SIN incluir esos otros rakefiles. Lo usé como parte de una tarea de rake que necesitaba validar otros rakefiles.

Clase principal

class RakeBrowser attr_reader :tasks attr_reader :variables attr_reader :loads @last_description = '''' @namespace = '''' include Rake::DSL def desc(description) @last_description = description end def namespace(name=nil, &block) # :doc: old = @namespace @namespace = "#{name}:#{@namespace}" yield(block) @namespace = old end def task(*args, &block) if args.first.respond_to?(:id2name) @tasks << "#{@namespace}" + args.first.id2name elsif args.first.keys.first.respond_to?(:id2name) @tasks << "#{@namespace}" + args.first.keys.first.id2name end end def load(filename) @loads << filename end def initialize(file) @tasks = [] @loads = [] Dir.chdir(File.dirname(file)) do eval(File.read(File.basename(file))) end @variables = Hash.new instance_variables.each do |name| @variables[name] = instance_variable_get(name) end end end

Implementación

desc "Show all the tasks" task :default do browser = RakeBrowser.new(''common.rake'') browser.tasks.each do |task| puts " " + task end end

El código completo está en


No importa. Encontré la respuesta una vez que encontré el método correcto.

Además de llamar a display_tasks_and_comments, también debe configurar la expresión regular para filtrar las tareas que desea mostrar o, de forma predeterminada, las filtrará todas.

Para hacer que su tarea predeterminada sea la salida de rake -T use lo siguiente:

task :default do Rake.application.options.show_task_pattern = // Rake.application.display_tasks_and_comments() end


Invocar rake -T desde dentro de las tareas es un poco más complicado en las versiones más recientes de rake. Las opciones que deben configurarse pueden derivarse de rake/lib/application.rb en el método standard_rake_options . Básicamente esto se reduce a

Rake::TaskManager.record_task_metadata = true task :default do Rake::application.options.show_tasks = :tasks # this solves sidewaysmilk problem Rake::application.options.show_task_pattern = // Rake::application.display_tasks_and_comments end

Tenga en cuenta que record_task_metadata no se puede establecer dentro de la tarea predeterminada, ya que ya será demasiado tarde cuando se ejecute la tarea (las descripciones no se han recopilado, por lo tanto, son nulas y por lo tanto ninguna tarea coincide con el patrón). Intentar volver a cargar el archivo de Rake desde una tarea llevará a un bucle cerrado. Supongo que hay transacciones de rendimiento cuando siempre se recopilan metadatos. Si eso es un problema

task :default do system("rake -sT") # s for silent end

podría ser más adecuado.

Ambos trabajan para mí usando rake 0.9.2.2.