Как мне найти исходный файл для граблей?
-
06-07-2019 - |
Вопрос
Я знаю, что вы можете просмотреть все возможные задачи рейка, набрав
rake -T
Но мне нужно знать, что именно делает задание. Из вывода, как я могу найти исходный файл, который на самом деле имеет задачу? Например, я пытаюсь найти источник для задачи db: schema: dump.
Решение
Несмотря на то, что говорили другие, вы можете программно получить исходное местоположение задач rake в приложении rails. Для этого просто запустите что-то вроде следующего в своем коде или из консоли:
# 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)
Это вернет исходные местоположения любого кода, который выполняется для этой задачи. Вы также можете использовать #prerequisites
вместо #source_location
, чтобы получить список обязательных имен задач (например, «среда» и т. Д.).
Вы также можете перечислить все загруженные задачи, используя:
Rake.application.tasks
ОБНОВЛЕНИЕ: см. хороший ответ Магне ниже. Для версий rake > = 0.9.0 вы можете использовать rake -W
, чтобы показать исходное местоположение ваших задач rake.
Другие советы
Я знаю, что это старый вопрос, но в любом случае:
rake -W
Это было введено в граблях 0.9.0.
http://rake.rubyforge.org/doc/release_notes/rake- 0_9_0_rdoc.html р>
Поддержка флага & # 8211; где (-W), показывающего, где определена задача.
К сожалению, нет никакого программного способа сделать это. Rake-задачи могут быть загружены либо из самого rails, lib / tasks, либо из любого плагина с каталогом задач.
Это должно содержать почти все, что не внутри самого Rails:
find . -name "*.rake" | xargs grep "whatever"
Что касается db: schema: dump
, то вот источник:
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
Его можно найти в строке 242 lib / tasks / database.rake в геме rails 2.2.2. Если у вас есть другая версия Rails, просто найдите " <код> пространство имен: схема ".
Возможно, вам действительно нужен источник ActiveRecord :: SchemaDumper
, но я думаю, у вас не должно возникнуть проблем с выяснением, где это находится. : -)
Для большинства rake-задач в Rails посмотрите каталог gem Rails в lib / tasks.
Если вы внедрили Rails в структуру каталогов своего приложения, то посмотрите вместо этого в vendor / rails / railties / lib / tasks
В любом случае, db: schema: dump находится в database.rake.