¿Cómo encuentro el archivo fuente para una tarea de rastrillo?
-
06-07-2019 - |
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.
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.