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