Где определены задачи рейка?
В недавно созданном проекте Rails (сгенерированном rails someName
) можно выполнить некоторые "дефолтные" задачи рейка, например:
-
rake test
-
rake db:migrate
- и т.д.
Вопрос в том, где описываются эти задачи? По умолчанию Rakefile
не все эти задачи.
Кроме того, я проверил некоторый проект, который использует rspec
, и я могу запустить rake spec
для запуска всех тестов. Где определена цель spec
?
Ответы
Ответ 1
Задачи рейка автоматически загружаются из структуры папок lib/tasks/*.rake
Когда мы говорим о задаче db: например, migrate, она находится в пределах rails gem в lib/tasks/databases.rake
Итак, для конкретного проекта вы всегда будете иметь задачи в структуре папок проекта, а также все задачи в указанных драгоценных камнях.
Ответ 2
Если по описанию вы имеете в виду определенный, 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)>'
Просто нашел это сегодня:)
Ответ 3
Чтобы найти конкретные файлы и номера строк, где задана и/или изменена задача, сделайте следующее:
Запустите консоль рельсов:
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 (и все остальные включенные), находит нужную задачу и вызывает метод местоположений на нем.
Из комментариев одинакового пользователя, для rake v 10.1.0 и, возможно, более старых версий рейка вам может потребоваться: tsk.actions
вместо tsk.locations
Ответ 4
Вы не указали, какую версию рельсов вы используете, но в 3.0.7 задачи db
находятся в драгоценности Gem в Active Directory,
lib/active_record/railties/databases.rake
Обновление:
Как и у рельсов версии 3.2.7, задачи все еще существуют, о чем я говорил выше.
Ответ 5
В Rails 3 камень railties
определяет множество задач рейка.
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 install open_gem
gem open railties
Ответ 6
В проекте, который вы проверили, вероятно, используется драгоценный камень rspec-rails. Этот камень определяет задачу spec
. Вы можете увидеть исходный код здесь:
https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/tasks/rspec.rake
Ответ 7
Чтобы перечислить все задачи:
rake -P
Поскольку многие задачи исходят от камней, вы устанавливаете их трудно, чтобы узнать, какие из них добавлены...