Как найти исходный файл для задачи рейка?
Я знаю, что вы можете просмотреть все возможные задачи рейка, набрав
rake -T
Но мне нужно знать, что именно делает задача. Из вывода, как я могу найти исходный файл, на самом деле имеющий задачу? Например, я пытаюсь найти источник для задачи db: schema: dump.
Ответы
Ответ 1
Несмотря на то, что говорили другие, вы можете программно получить исходное местоположение задач рейка в приложении 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
ОБНОВЛЕНИЕ:. См. хороший ответ Магне. Для версий рейкa >= 0.9.0 вы можете использовать rake -W
, чтобы показать исходное местоположение ваших задач рейка.
Ответ 2
Я знаю, что это старый вопрос, но в любом случае:
rake -W
Это было введено в графе 0.9.0.
http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html
Поддержка флага -where (-W) для отображения, где задана задача.
Ответ 3
Нет программного способа сделать это, к сожалению. Задачи Rake могут загружаться либо из самих рельсов, либо из 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 в рельсах 2.2.2. Если у вас есть другая версия Rails, просто найдите "namespace :schema
".
Вероятно, вам действительно нужен источник ActiveRecord::SchemaDumper
, но я думаю, вам не составит труда понять, где это.: -)
Ответ 4
Для большинства задач rake в Rails загляните в каталог Rails gem в lib/tasks.
Если вы создали Rails в своей структуре каталогов приложений, посмотрите вместо этого в vendor/rails/railties/lib/tasks.
В любом случае, db: schema: дамп находится в databases.rake.