Где определены грабли? - PullRequest
63 голосов
/ 20 января 2011

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

  • rake test
  • rake db:migrate
  • и т.д.

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

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

Ответы [ 7 ]

104 голосов
/ 04 апреля 2013

Если под описанным вами подразумевается определение, грабли -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)>'

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

48 голосов
/ 20 января 2011

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

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

* 1006.* Таким образом, для конкретного проекта у вас всегда будут задачи в структуре папок проекта, а также все задачи в указанных драгоценных камнях.
18 голосов
/ 01 сентября 2012

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

Запустить консоль рельсов:

rails c

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

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

Из комментария Sameers, для rake v 10.1.0 и, возможно, более старых версий rake вам может потребоваться позвонить: tsk.actions вместо tsk.locations

5 голосов
/ 11 мая 2011

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

lib/active_record/railties/databases.rake

Обновление:

Начиная с версии 3.2.7, задачи все еще там, где я говорил выше.

2 голосов
/ 14 декабря 2014

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

rake -P

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

2 голосов
/ 19 июня 2012

В 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
1 голос
/ 26 апреля 2013

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

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

...