2009-05-06 4 views

Respuesta

36

A pesar de lo que otros han dicho, puede obtener programáticamente la ubicación de origen de las tareas de rake en una aplicación de rieles. Para ello, basta con ejecutar algo como lo siguiente en el 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 ejecuta 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, 'medio ambiente', etc.).

También puede enumerar todas las tareas cargadas usando:

Rake.application.tasks 

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

+0

Bastante increíble encontrar. – Tilendor

+1

Solo para tu información: debes asegurarte de que el rastrillo esté cargado antes de utilizar este método. si no es así, simplemente haz un "requiera" de rake '". –

+0

muy agradecido, amable señor! – mrstif

0

Para la mayoría de las tareas de rake en Rails, busque en el directorio gem de Rails, en lib/tasks.

Si ha vendored rieles en su estructura de directorios de aplicación a continuación, busque en los proveedores/carriles/railties/lib/tareas en lugar

De cualquier manera, db: schema: dump está en databases.rake.

+0

¿Pero existe una forma programática de hacerlo? Terminé haciendo un hallazgo en la búsqueda de archivos. – Tilendor

6

Desafortunadamente, no hay una forma programática de hacerlo. Las tareas de Rake se pueden cargar desde los rieles en sí, lib/tasks o desde cualquier complemento con un directorio de tareas.

Esto debería atrapar a la mayoría de todo no dentro de Rails mismo:

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 del lib/tareas/base de datos. rastrillar en los carriles 2.2.2 gema. Si tiene una versión diferente de Rails, simplemente busque "namespace :schema".

Es probable que realmente desee la fuente del ActiveRecord::SchemaDumper, pero creo que no debería tener problemas para averiguar dónde está. :-)

71

Sé que esto es una cuestión de edad, pero en todo 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 la bandera -donde (-W) para mostrar donde se define una tarea.

+0

Gracias por actualizar esto, siempre es bueno obtener una respuesta más actual! –

+0

Gracias. ¡Dulce! :) – flagman

+0

¡Esta debería ser la respuesta aceptada! –

Cuestiones relacionadas