Где определены задачи рейка?



в недавно созданном проекте Rails (сгенерированном rails someName), можно запустить некоторые "по умолчанию" грабли задачи, такие как:




  • rake test

  • rake db:migrate

  • etc


вопрос в том, где эти задачи описываются? Значение по умолчанию Rakefile не имеет всех этих задач.



кроме того, я проверил некоторые проекты, которые используют rspec и я могу запустить rake spec для выполнения всех тестов. Где же это spec цель определились?

555   7  

7 ответов:

Rake задачи автоматически загружаются из структуры папок lib/tasks/*.rake

когда мы говорим о задаче db: migrate например, она находится внутри rails gem в lib/tasks/databases.rake

Если под описанным вы подразумеваете определенный, rake-W-ваш друг. Пример:

$ 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)>'

только что узнал сегодня :)

чтобы найти конкретные файлы и номера строк, в которых определена и/или изменена задача, выполните следующие действия:

запустите консоль rails:

rails c

затем выполните следующие команды:

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, сообщает Rake отслеживать местоположения файлов, загружает Rakefile (и все другие включенные), находит рассматриваемую задачу и вызывает метод расположения на нем.

из комментария sameers, для rake v 10.1.0 и, возможно, более старых версий rake вам, возможно, придется позвонить: ООО "ТСК".действия вместо ООО "ТСК".локации

вы не указали, какую версию rails вы используете, но в 3.0.7 db задачи находятся в драгоценном камне ActiveRecord в

lib/active_record/railties/databases.rake

обновление:

начиная с версии rails 3.2.7, задачи по-прежнему находятся там, где я указал выше.

в рельсы 3 в railties gem определяет множество задач рейка.

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

если $EDITOR настроен, вы можете легко увидеть их самостоятельно с open_gem gem:

gem install open_gem
gem open railties

чтобы перечислить все задачи:

rake -P

Так как многие задачи исходят от драгоценных камней, которые вы устанавливаете, трудно узнать, какие из них добавлены...

проект, который вы проверили, вероятно, использует rspec-rails камень. Этот камень определяет spec задач. Вы можете увидеть исходный код здесь:

https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/tasks/rspec.rake

Comments

    Ничего не найдено.