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?

¿Fue útil?

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í:

https: // github. com / rspec / rspec-rieles / burbuja / maestro / lib / rspec / rieles / tareas / rspec.rake

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