如何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中。