ruby-on-rails - ruby on rails rake task
¿Dónde se definen las tareas de rake? (7)
El proyecto que verificaste probablemente usa la gema rspec-rails . Esa gema define la tarea spec
. Puedes ver el código fuente aquí:
https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/tasks/rspec.rake
En un proyecto Rails recién creado (generado por rails someName
), uno puede ejecutar algunas tareas de rastrillo "predeterminadas" como:
-
rake test
-
rake db:migrate
- etc
La pregunta es, ¿dónde se describen estas tareas? El Rakefile
predeterminado no tiene todas estas tareas.
Además, verifiqué un proyecto que usa rspec
y puedo ejecutar una rake spec
para ejecutar todas las pruebas. ¿Dónde se define el objetivo de la spec
?
En Rails 3, la gema de railties
define muchas tareas de rake.
railties-3.2.5/lib/rails/tasks/annotations.rake
railties-3.2.5/lib/rails/tasks/documentation.rake
railties-3.2.5/lib/rails/tasks/engine.rake
railties-3.2.5/lib/rails/tasks/framework.rake
railties-3.2.5/lib/rails/tasks/log.rake
railties-3.2.5/lib/rails/tasks/middleware.rake
railties-3.2.5/lib/rails/tasks/misc.rake
railties-3.2.5/lib/rails/tasks/routes.rake
railties-3.2.5/lib/rails/tasks/statistics.rake
railties-3.2.5/lib/rails/tasks/tmp.rake
railties-3.2.5/lib/rails/test_unit/testing.rake
Si su $EDITOR
está configurado, puede verlos fácilmente con la gema open_gem
:
gem install open_gem
gem open railties
Las tareas de rake se cargan automáticamente desde la estructura de carpetas lib/tasks/*.rake
Cuando estamos hablando de la tarea db: migrate, por ejemplo, se encuentra dentro de la gema de rieles en lib/tasks/databases.rake
Por lo tanto, para un proyecto específico, siempre tendrá las tareas dentro de la estructura de carpetas del proyecto, así como todas las tareas dentro de las gemas especificadas.
No especificó qué versión de los rieles está utilizando, pero en 3.0.7 las tareas de la base de datos se encuentran en la gema ActiveRecord en
lib/active_record/railties/databases.rake
Actualizar:
A partir de la versión 3.2.7 de Rails, las tareas siguen siendo las que mencioné anteriormente.
Para encontrar los archivos específicos y los números de línea donde se define y / o modifica una tarea, haga esto:
Arranca una consola de rieles:
rails c
A continuación, ejecute estos comandos:
require ''rake''
Rake::TaskManager.record_task_metadata=true
Rake.application.load ''Rakefile''
tsk = Rake.application.tasks.each.find {|t| t.name ==''my_task_name''}
tsk.locations
Rake básicamente puede rastrear las ubicaciones internamente y tiene un método ingenioso para mostrarlas a pedido. El código anterior básicamente carga rake, le dice a Rake que rastree las ubicaciones de los archivos, carga el Rakefile (y todos los demás incluidos), encuentra la tarea en cuestión y llama al método de ubicación.
Desde el comentario de sameers, para rake v 10.1.0 y posiblemente versiones anteriores de rake puede que tengas que llamar: tsk.actions en lugar de tsk.locations
Para enumerar todas las tareas:
rake -P
Ya que muchas tareas provienen de gemas que instala, es difícil saber cuáles se agregan ...
Si por descrito te refieres a definido, rastrillo -W es tu amigo. Ejemplo:
$ rake -W db:create
=>
rake db:create /path/to/ruby/gems/1.9.1/gems/activerecord-3.1.11/lib/active_record/railties/databases.rake:39:in `block in <top (required)>''
Acabo de encontrar esto hoy :)