Gdzie są zdefiniowane zadania rake?

Na świeżo utworzonym projekcie Rails (generowanym przez rails someName), można uruchomić kilka 'domyślnych' zadań rake ' owych, takich jak:

  • rake test
  • rake db:migrate
  • etc

Pytanie brzmi, gdzie opisane są te zadania? Domyślna Rakefile nie ma wszystkich tych zadań.

Ponadto sprawdziłem jakiś projekt, który używa rspec i jestem w stanie uruchomić rake spec, aby uruchomić wszystkie testy. Gdzie zdefiniowany jest cel spec?

Author: zetetic, 2011-01-20

7 answers

Zadania Rake są automatycznie ładowane ze struktury folderów lib/tasks/*.rake

Gdy mówimy o zadaniu db:migrate na przykład, znajduje się ono w gem rails w lib/tasks/databases.rake

Więc dla konkretnego projektu, zawsze będziesz mieć zadania w strukturze folderów projektu, jak również wszystkie zadania w określonych klejnotów.

 45
Author: DanneManne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-27 08:36:18

Jeśli przez opisane masz na myśli zdefiniowane, rake-W jest twoim przyjacielem. Przykład:

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

Właśnie dziś to odkryłem:)

 93
Author: Adam Groves,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 14:39:46

Aby znaleźć konkretne pliki i numery linii, w których zadanie jest zdefiniowane i / lub zmodyfikowane, wykonaj następujące czynności:

Uruchom konsolę rails:

rails c

Następnie uruchom te polecenia:

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 zasadniczo może śledzić lokalizacje wewnętrznie i ma sprytną metodę, aby pokazać je na żądanie. Powyższy kod zasadniczo ładuje rake, mówi Rake, aby śledził Lokalizacje plików, ładuje plik Rakefile( i wszystkie inne dołączone), znajduje zadanie, o którym mowa, i wywołuje metodę lokalizacje na to.

Z komentarza sameers, dla rake v 10.1.0 i ewentualnie starszych wersji rake ' a trzeba będzie wywołać: tsk.działania zamiast tsk.lokalizacje

 15
Author: jpgeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-09 10:39:14

Nie określiłeś, której wersji rails używasz, ale w 3.0.7 zadania db znajdują się w klejnocie ActiveRecord w

lib/active_record/railties/databases.rake

Aktualizacja:

Od wersji rails 3.2.7, zadania są nadal tam, gdzie wspomniałem powyżej.

 5
Author: mraaroncruz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-22 12:27:36

W Rails 3 gem railties definiuje wiele zadań 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

Jeśli Twoje $EDITOR jest skonfigurowane, możesz je łatwo zobaczyć samodzielnie za pomocą klejnotu open_gem:

gem install open_gem
gem open railties
 2
Author: AlexChaffee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-18 23:22:41

Aby wyświetlić listę wszystkich zadań:

rake -P

Ponieważ wiele zadań pochodzi z klejnotów, które instalujesz, trudno jest wiedzieć, które z nich są dodawane...

 2
Author: luigi7up,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-14 13:48:51

Projekt, który sprawdziłeś prawdopodobnie używa gem RSpec-rails . Ten klejnot definiuje spec zadanie. Możesz zobaczyć jego kod źródłowy tutaj:

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

 1
Author: David Grayson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-25 21:05:25