我知道您可以通过键入
来查看所有可能的佣金任务rake -T
但我需要知道一项任务到底是做什么的。从输出中,我如何找到实际具有任务的源文件?例如,我正在尝试查找db:schema:dump任务的源代码。
答案 0 :(得分:76)
我知道这是一个老问题,但无论如何:
rake -W
这是在rake 0.9.0中引入的。
http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html
支持-where(-W)标志,用于显示定义任务的位置。
答案 1 :(得分:39)
尽管其他人已经说过,但可以以编程方式获取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
来显示佣金任务的来源位置。
答案 2 :(得分:6)
不幸的是,没有程序化的方法可以做到这一点。 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
的来源,但我认为你应该毫不费力地找出它的位置。 : - )
答案 3 :(得分:0)
对于Rails中的大多数rake任务,请查看lib / tasks中的Rails gem目录。
如果您已将Rails出售到您的应用目录结构中,请查看vendor / rails / railties / lib / tasks
无论哪种方式,db:schema:dump都在databases.rake。
中