Подтвердить что ты не робот

Как найти исходный файл для задачи рейка?

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

rake -T

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

4b9b3361

Ответ 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.