2015-01-04 26 views
12

şey:Raylarda herhangi bir varlık precompile öncesi özel kodu nasıl çalıştırabilirim? (Bir in başlatıcısı) gibi

Sprockets.before_precompile do 
    # some custom stuff that preps or autogenerates some asset files 
    # that should then be considered in the asset pipeline as if they were checked in 
end 

Özellikle, bazı özel önişlemciler ile bazı JavaScript gruplandırmanın bir yudum görevi çalıştırmak istiyorum ve ben daha çok varlık almak için benim gulpfile yeniden istemem Herşeyi halletmek için boru hattı ... ve bu da mümkün olursa özel bir kuruma ihtiyaç duymadan Heroku üzerinde çalışmasını istiyorum. Düşüncesi olan var mı? Muhtemelen Sprockets bu tip kancalara sahiptir.

cevap

22

Kaynağından görebileceğim gibi, Sprockets'ın böyle bir çenesi yoktur, ancak tırmık görevi kancalarını kullanabilirsiniz. Örneğin, tüm preprocessorları, gulpları, vs. başlatan bir komisyon görevi yaratırsınız, bu yüzden bu görev ön derlemeden önce koyulabilir.

# lib/tasks/before_assets_precompile.rake 

task :before_assets_precompile do 
    # run a command which starts your packaging 
    system('gulp production') 
end 

# every time you execute 'rake assets:precompile' 
# run 'before_assets_precompile' first  
Rake::Task['assets:precompile'].enhance ['before_assets_precompile'] 

Sonra sadece rake assets:precompile çalıştırın ve sonuç olarak görev before_assets_precompile ondan bir önceki çalıştırılacaktır. exec Bu ön görevi çalıştıran bir sahnede sürecini çıkılacak ve beklendiği gibi kendisini sonra assets:precompile yayınlanmaz çünkü

Ayrıca yerine exec ait system kullandığınızdan emin olun.

Kaynaklar: Tam olarak ne gerekli

  1. Rake before task hook
  2. http://www.dan-manges.com/blog/modifying-rake-tasks
+0

! Teşekkürler! – btown

+0

Bu, "geliştirme" modunda gerçekleşen otomatik varlık derlemesinde çalışır mı? – Suan

+0

@Suan, eğer yanılmıyorsam, geliştirme env için canlı derleme sayfa yükü üzerinde yapılır, her defasında bir sayfa yeniden yüklenirken bir uygulama oluşturmak için bir yüce görev yürütmek bana biraz overkill görünüyor. Bu durumda gulp saatini kullanmak daha iyi olur, bu yüzden sadece kaynak dosyalarda değişiklik yaptığınızda ve sayfanın yeniden yükleneceği gulp tarafından hazırlanan en son varlıkları alacaksınız. Yine de, canlı derleme için benzer bir Rake görevi olup olmadığından emin değilim. –