Como encontro o arquivo de origem para uma tarefa de rake?
-
06-07-2019 - |
Pergunta
Eu sei que você pode ver todas as tarefas possíveis de rake digitando
rake -T
Mas eu preciso saber o que exatamente uma tarefa faz. Da saída, como posso encontrar um arquivo de origem que realmente tenha a tarefa? Por exemplo, estou tentando encontrar a fonte do banco de dados: Schema: Dump Task.
Solução
Apesar do que os outros disseram, você posso Obtenha programaticamente a localização da fonte das tarefas de rake em um aplicativo Rails. Para fazer isso, basta executar algo como o seguinte em seu código ou de um console:
# 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)
Isso retornará os locais de origem de qualquer código que seja executado para esta tarefa. Você também pode usar #prerequisites
ao invés de #source_location
Para obter uma lista de nomes de tarefas de pré -requisito (por exemplo, 'ambiente', etc.).
Você também pode listar todas as tarefas carregadas usando:
Rake.application.tasks
ATUALIZAR: Veja a boa resposta de Magne abaixo. Para versões de ancinho> = 0.9.0 você pode usar rake -W
para mostrar a localização da fonte de suas tarefas de rake.
Outras dicas
Eu sei que essa é uma pergunta antiga, mas em qualquer caso:
rake -W
Isso foi introduzido no Rake 0.9.0.
http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html
Suporte para o sinalizador –Where (-w) para mostrar onde uma tarefa é definida.
Infelizmente, não há maneira programática de fazer isso. As tarefas de rake podem ser carregadas do próprio Rails, Lib/Tasks ou de qualquer plug -in com um diretório de tarefas.
Isso deve prender quase tudo que não está dentro dos próprios trilhos:
find . -name "*.rake" | xargs grep "whatever"
Quanto a db:schema:dump
, aqui está a fonte:
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
Pode ser encontrado na linha 242 do Lib/Tasks/Database.Rake no Rails 2.2.2 GEM. Se você tem uma versão diferente do Rails, basta procurar por "namespace :schema
".
Você provavelmente realmente quer a fonte do ActiveRecord::SchemaDumper
, mas acho que você não deve ter problemas para descobrir onde está. :-)
Para a maioria das tarefas de rake nos trilhos, procure no diretório GEM do Rails, em LIB/tarefas.
Se você vende trilhos na sua estrutura de diretório de aplicativos, procure em fornecedores/trilhos/ferrovias/libras/tarefas em vez disso
De qualquer maneira, db: esquema: dump está em bancos de dados.rake.