[英]How do I find the source file for a rake task?
我知道您可以通過鍵入來查看所有可能的rake任務
rake -T
但我需要知道一項任務到底是做什么的。 從輸出中,我如何找到實際具有任務的源文件? 例如,我正在嘗試查找db:schema:dump任務的源代碼。
我知道這是一個老問題,但無論如何:
rake -W
這是在rake 0.9.0中引入的。
http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html
支持-where(-W)標志,用於顯示定義任務的位置。
盡管其他人已經說過,您可以通過編程方式在rails應用程序中獲取rake任務的源位置。 要執行此操作,只需在代碼中或從控制台運行以下內容:
# 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
更新:請參閱下面的Magne的好答案。 對於rake> = 0.9.0的版本,您可以使用rake -W
來顯示rake任務的源位置。
不幸的是,沒有程序化的方法來做到這一點。 Rake任務可以從rails本身,lib / tasks或任何帶有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
它可以在rails 2.2.2 gem中的lib / tasks / database.rake的第242行找到。 如果你有不同版本的Rails,只需搜索“ namespace :schema
”。
你可能真的想要ActiveRecord::SchemaDumper
的來源,但我認為你應該毫不費力地找出它的位置。 :-)
對於Rails中的大多數rake任務,請查看lib / tasks中的Rails gem目錄。
如果您已將Rails出售到您的應用程序目錄結構中,那么請查看vendor / rails / railties / lib / tasks
無論哪種方式,db:schema:dump都在databases.rake中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.