rails ruby-on-rails ruby rake rakefile

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