我知道您可以通过键入

来查看所有可能的佣金任务
rake -T

但我需要知道一项任务到底是做什么的。从输出中,我如何找到实际具有任务的源文件?例如,我正在尝试查找db:schema:dump任务的源代码。

有帮助吗?

解决方案

尽管其他人已经说过,但可以以编程方式获取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)

这将返回为此任务执行的任何代码的源位置。您还可以使用 #prequisite“而不是 #source_location 来获取必备任务名称列表(例如”环境“等)。

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

Rake.application.tasks

更新:请参阅下面的Magne的好答案。对于 rake> = 0.9.0 的版本,您可以使用 rake -W 来显示rake任务的源位置。

其他提示

我知道这是一个老问题,但无论如何:

rake -W

这是在rake 0.9.0中引入的。

http://rake.rubyforge.org/doc/release_notes/rake- 0_9_0_rdoc.html

  

支持– where(-W)标志,用于显示定义任务的位置。

不幸的是,没有程序化的方法可以做到这一点。 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归因
不隶属于 StackOverflow
scroll top