Jak znaleźć plik źródłowy dla zadania rake?

Wiem, że możesz wyświetlić wszystkie możliwe zadania rake wpisując

rake -T
Ale muszę wiedzieć, co dokładnie robi zadanie. Jak mogę znaleźć plik źródłowy, który rzeczywiście ma to zadanie? Na przykład, próbuję znaleźć źródło dla zadania db: schema: dump.
Author: Tilendor, 2009-05-06

4 answers

Pomimo tego, co powiedzieli inni, ty możesz programowo uzyskać lokalizację źródłową zadań rake w aplikacji rails. Aby to zrobić, po prostu uruchom coś takiego w kodzie lub z konsoli:

# load all the tasks associated with the rails app
Rails.application.load_tasks

# get the source locations of actions called by a task
task_name = 'db:schema:load' # fully scoped task name
Rake.application[task_name].actions.map(&:source_location)

Zwróci to lokalizacje źródłowe kodu, który zostanie wykonany dla tego zadania. Możesz również użyć #prerequisites zamiast #source_location, aby uzyskać listę wymaganych nazw zadań (np.' środowisko', itp.).

Możesz również wyświetlić listę wszystkich załadowanych zadań użycie:

Rake.application.tasks

Aktualizacja: Zobacz dobrą odpowiedź Magne poniżej. Dla wersji rake > = 0.9.0 możesz użyć rake -W, aby pokazać lokalizację źródłową swoich zadań rake.

 38
Author: Tom Lubitz,
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
2015-08-01 00:02:25

Wiem, że to stare pytanie, ale w każdym razie:

rake -W

To zostało wprowadzone w rake 0.9.0.

Http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html

Wsparcie dla flagi-where (- w) do pokazania, gdzie zdefiniowano zadanie.

 75
Author: Magne Land,
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-27 21:41:43

Niestety nie ma na to żadnego programu. Rake tasks może być załadowany albo z samego rails, lib / tasks, albo z dowolnej wtyczki z katalogiem tasks.

To powinno przechwytywać większość wszystkiego, co nie mieści się w Railach:

find . -name "*.rake" | xargs grep "whatever"

Jeśli chodzi o db:schema:dump, Oto źródło:

desc "Create a db/schema.rb file that can be portably used against any DB supported by AR"
task :dump => :environment do
  require 'active_record/schema_dumper'
  File.open(ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb", "w") do |file|
    ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
  end
end

Można go znaleźć w linii 242 lib / tasks / database.grabie w szynach 2.2.2 gem. Jeśli masz inną wersję Rails, po prostu wyszukaj "namespace :schema".

Prawdopodobnie chcesz źródło ActiveRecord::SchemaDumper, ale myślę, że nie powinieneś mieć problemów z ustaleniem, gdzie to jest. :-)

 6
Author: Bob Aman,
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
2009-05-06 18:04:52

Dla większości zadań rake w Rails, poszukaj w katalogu rails gem, w lib / tasks.

Jeśli dodałeś Rails do swojej struktury katalogów aplikacji, poszukaj zamiast tego w vendor / rails / railties / lib / tasks

Tak czy inaczej, db:schema: dump jest w bazach danych.grabie.

 0
Author: Mike Woodhouse,
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
2009-05-06 16:37:54