Вопрос

Я знаю, что вы можете просмотреть все возможные задачи рейка, набрав

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top