Donde se definen las tareas rake?
-
13-10-2019 - |
Pregunta
En un proyecto Rails recién creado (generada por rails someName
), se puede ejecutar algunas tareas rake 'default' como:
-
rake test
-
rake db:migrate
- etc.
La pregunta es, ¿de dónde obtener describe estas tareas? El Rakefile
por defecto no tiene todas estas tareas.
Además, he comprobado a cabo algún proyecto que los usos rspec
y yo soy capaz de ejecutar rake spec
a ejecutar todas las pruebas. ¿Dónde se define el objetivo spec
?
Solución
tareas Rake se cargan automáticamente de la lib/tasks/*.rake
estructura de carpetas
Cuando estamos hablando de la tarea db: migrate por ejemplo, que se encuentra dentro de los rieles joya en lib/tasks/databases.rake
Así que para un proyecto específico, que siempre tendrá las tareas dentro de la estructura de carpetas de proyectos, así como todas las tareas dentro de las gemas especificados.
Otros consejos
Si quieres decir por descrita definido, -W rastrillo es su 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)>'
Sólo encontraron esta fuera hoy:)
Para encontrar los archivos y los números de línea en la que una tarea se define y / o modificado, haga lo siguiente:
Iniciar 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.find {|t| t.name =='my_task_name'}
tsk.locations
Rake, básicamente, se puede rastrear la ubicación internamente y tiene un método ingenioso para mostrar que los solicite. El código anterior básicamente cargas rastrillo, dice Rastrillo para rastrear las ubicaciones de archivos, carga el Rakefile (y todos los demás incluidos unos), encuentra la tarea en cuestión, y llama al método ubicaciones en él.
De sameers comentario, por rastrillo v 10.1.0 y posiblemente versiones anteriores de rastrillo puede que tenga que llamar a: tsk.actions en lugar de tsk.locations
No especificó qué versión de rieles que está utilizando, pero en las tareas 3.0.7 db
se encuentra en la gema en ActiveRecord
lib/active_record/railties/databases.rake
Actualización:
A partir de la versión 3.2.7 rieles, las tareas están todavía donde he dicho anteriormente.
En Rails 3 la gema railties
define una gran cantidad de tareas rastrillo.
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 está configurado su $EDITOR
, se les puede ver fácilmente a sí mismo con la gema open_gem
:
gem install open_gem
gem open railties
Para listar todas las tareas:
rake -P
Dado que muchas tareas provienen de las gemas de instalar que es difícil saber cuáles son añadidos ...
El proyecto que desprotegió probablemente usa los rspec-carriles joya. Esa joya define la tarea spec
. Se puede ver el código fuente de aquí: