如何findrake任务的源文件?

我知道你可以通过input查看所有可能的耙子任务

rake -T 

但是我需要知道一个任务究竟是做什么的。 从输出中,我怎样才能find一个真正有这个任务的源文件? 例如,我试图finddb:schema:dump任务的源代码。

不pipe别人怎么说,你可以通过编程的方式获得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来获取必备任务名称列表(例如'environment'等)。

您还可以列出所有使用以下的任务加载:

 Rake.application.tasks 

更新:见下面Magne的好答案。 对于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

支持-where(-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 

它可以在rails 2.2.2 gem的lib / tasks / database.rake的第242行find。 如果你有不同版本的Rails,只要search“ namespace :schema ”。

您可能实际上需要ActiveRecord::SchemaDumper的来源,但我认为您应该没有弄清楚它在哪里。 🙂

对于Rails中的大多数Rake任务,请查看lib / tasks中的Rails gem目录。

如果你已经在你的应用程序目录结构中引入了Rails,那么请看看vendor / rails / railties / lib / tasks

无论哪种方式,db:schema:dump都在databases.rake中。