2009-05-06 21 views
37

Sana Bir komisyon görevi için kaynak dosyayı nasıl bulurum?

rake -T 

yazarak olası tüm tırmık görevleri görüntülemek biliyorum Ama tam bir görev yaptığını bilmemiz gerekir. Çıktıdan, aslında görevi olan bir kaynak dosyayı nasıl bulabilirim? Örneğin, db: schema: dump görevi için kaynak bulmaya çalışıyorum.

cevap

36

Diğerlerinin söylediğine rağmen, , bir raylar uygulamasında sorgu görevlerinin kaynak konumunu programlı olarak alabilir. Bunu yapmak için, sadece kodunuzu veya konsoldan aşağıdaki gibi bir şey çalıştırın:

# 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) 

Bu, bu görev için çalıştırılmaktadır herhangi kodun kaynak yerleri dönecektir. Ön koşul görev adlarının bir listesini (ör. 'Çevre' vb.) Almak için #source_location yerine #prerequisites'u da kullanabilirsiniz.

Ayrıca kullanılarak yüklenen tüm görevleri listeleyebilirsiniz:

Rake.application.tasks 

GÜNCELLEME: Aşağıdaki Bkz Magne en iyi cevap. rake> = 0.9.0 sürümleri için, komisyon görevlerinizin kaynak konumunu göstermek için rake -W kullanabilirsiniz.

+0

Oldukça harika bir keşif. – Tilendor

+1

Sadece FYI: Bu yöntemi kullanmadan önce tırmığın yüklendiğinden emin olmalısınız. değilse, sadece "talep" komisyonu "yapın. –

+0

çok mecbur, bayım! – mrstif

0

Rails'teki çoğu komisyon görevi için, Rails gem dizinine lib/task içinde bakın.

sonra satıcı/raylar/railties/lib/görevleri yerine

Ya gibi görünmesini uygulama dizin yapısı içine Rayları vendored ettiyseniz, db: şema: dökümü databases.rake içindedir.

+0

Bunu yapmak için programatik bir yol var mı? Dosya aramada bir bulmacayı bitirdim. – Tilendor

6

Maalesef bunu yapmak için programatik bir yol yoktur. Rake görevleri, rayların kendisinden, lib/görevlerinden veya herhangi bir eklentiden görev dizini ile yüklenebilir.

Bu

değil Raylar kendi içinde en herşeyi yakalamak olmalıdır:

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 

Bu lib/görevler/veritabanının hattı 242 üzerinde bulunabilir: db:schema:dump gelince

find . -name "*.rake" | xargs grep "whatever" 

, burada kaynağıdır. raylar 2.2.2 gem tırmık. Rails'in farklı bir sürümü varsa, sadece "namespace :schema" için arama yapın.

Muhtemelen ActiveRecord::SchemaDumper kaynağının kaynağını istersiniz, ancak bunun nerede olduğunu bulmakta sorun yaşamanız gerektiğini düşünüyorum. :-)

71

Ben bu eski bir soru ama her halükarda biliyoruz:

rake -W 

Bu tırmık 0.9.0 tanıtıldı.

http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html bir görev tanımlanır nerede göstermek için -ki (-W) bayrak için

destek.

+0

Bunu güncellediğiniz için teşekkürler, daha güncel bir yanıt almak her zaman güzel! –

+0

Teşekkür ederim. Tatlı! :) – flagman

+0

Bu kabul edilen cevap olmalı! –

İlgili konular