Как мне найти исходный файл для граблей? - PullRequest
41 голосов
/ 06 мая 2009

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

rake -T

Но мне нужно знать, что именно делает задание. Из вывода, как я могу найти исходный файл, который на самом деле имеет задачу? Например, я пытаюсь найти источник для задачи db: schema: dump.

Ответы [ 4 ]

76 голосов
/ 28 апреля 2013

Я знаю, что это старый вопрос, но в любом случае:

rake -W

Это было введено в граблях 0.9.0.

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

Поддержка флага –where (-W), показывающего, где задана задача.

39 голосов
/ 12 апреля 2012

Несмотря на то, что говорили другие, вы можете программно получить исходное местоположение задач 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, чтобы показать исходное местоположение ваших рейковых задач.

6 голосов
/ 06 мая 2009

К сожалению, нет никакого программного способа сделать это. 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, просто найдите «namespace :schema».

Возможно, вы на самом деле хотите получить источник ActiveRecord::SchemaDumper, но я думаю, вам не составит труда выяснить, где он находится. : -)

0 голосов
/ 06 мая 2009

Для большинства rake-задач в Rails посмотрите каталог gem Rails в lib / tasks.

Если вы внедрили Rails в структуру каталогов вашего приложения, тогда посмотрите вместо этого в vendor / rails / railties / lib / tasks

В любом случае, db: schema: dump находится в database.rake.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...