Pregunta

Sé que puede ver todas las posibles tareas de rake escribiendo

rake -T

Pero necesito saber qué hace exactamente una tarea. Desde el resultado, ¿cómo puedo encontrar un archivo fuente que realmente tenga la tarea? Por ejemplo, estoy tratando de encontrar el origen de la tarea db: schema: dump.

¿Fue útil?

Solución

A pesar de lo que otros han dicho, usted puede obtener programáticamente la ubicación de origen de las tareas de rake en una aplicación de rails. Para hacer esto, simplemente ejecute algo como lo siguiente en su código o desde una consola:

# load all the tasks associated with the rails app
Rails.application.load_tasks

# get the source locations of actions called by a task
task_name = 'db:schema:load' # fully scoped task name
Rake.application[task_name].actions.map(&:source_location)

Esto devolverá las ubicaciones de origen de cualquier código que se ejecute para esta tarea. También puede usar #prerequisites en lugar de #source_location para obtener una lista de nombres de tareas de requisitos previos (por ejemplo, 'entorno', etc.).

También puede enumerar todas las tareas cargadas usando:

Rake.application.tasks

ACTUALIZACIÓN: Vea la buena respuesta de Magne a continuación. Para las versiones de rake > = 0.9.0 puede usar rake -W para mostrar la ubicación de origen de sus tareas de rake.

Otros consejos

Sé que esta es una vieja pregunta, pero en cualquier caso:

rake -W

Esto se introdujo en rake 0.9.0.

http://rake.rubyforge.org/doc/release_notes/rake- 0_9_0_rdoc.html

  

Soporte para el indicador & # 8211; where (-W) para mostrar dónde se define una tarea.

Desafortunadamente, no hay una forma programática de hacer esto. Las tareas de rastrillo se pueden cargar desde los rieles, lib / task o desde cualquier complemento con un directorio de tareas.

Esto debería atrapar casi todo lo que no esté dentro de Rails:

find . -name "*.rake" | xargs grep "whatever"

En cuanto a db: schema: dump , aquí está la fuente:

desc "Create a db/schema.rb file that can be portably used against any DB supported by AR"
task :dump => :environment do
  require 'active_record/schema_dumper'
  File.open(ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb", "w") do |file|
    ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
  end
end

Se puede encontrar en la línea 242 de lib / task / database.rake en los rieles 2.2.2 gem. Si tiene una versión diferente de Rails, solo busque " espacio de nombres: esquema " ;.

Probablemente quieras la fuente del ActiveRecord :: SchemaDumper , pero creo que no deberías tener problemas para averiguar dónde está. :-)

Para la mayoría de las tareas de rastrillo en Rails, busque en el directorio de gemas de Rails, en lib / task.

Si ha enviado Rails a la estructura de directorios de su aplicación, busque en proveedor / rails / railties / lib / tareas

De cualquier manera, db: schema: dump está en bases de datos.rake.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top