1
我們在我們的代碼中使用了css.scss.erb文件。這個文件訪問de模型迭代每個循環來創建一個css文件。有時我們需要重做文件(當模型改變時)。生產中的動態預編譯資產
**stylesheets/utils/_comunicaciones.css.scss.erb**
<%Producto.all.each do |img| %>
<%unless img.portada.blank?%>
##{$id}--<%=img.id%> {
&:before {
background: url('<%= img.portada.url(:icon_lands) %>');
background-position: $bg-position;
background-size: $bg-size;
background-repeat: $bg-repeat;
}
}
<%end%>
<%end%>
我們在config/initializers/assets.rb中放置了一個config.assets.precompile行來表示這個錯誤。
Rails.application.config.assets.precompile += %w(stylesheets/utils/_comunicaciones.css.scss.erb)
Rails.application.config.assets.precompile += %w('*.css.scss.erb')
爲了使它在開發模式下工作,我們在模型更改時更改文件。
class ProductoImagen < ActiveRecord::Base
before_save :precompilar
belongs_to :producto
def precompilar
fichero = File.read('app/assets/stylesheets/utils/_comunicaciones.css.scss.erb').split('/* #=cambios')[0].to_s + '/*' + " #=cambios " + Time.now.to_s + '*/'
File.open('app/assets/stylesheets/utils/_comunicaciones.css.scss.erb','w') {|f| f.write(fichero)}
#Rails.application.load_tasks
#Rake::Task['assets:precompile'].invoke
end
我應該怎麼做才能在生產模式下更改文件? 如何重新預編譯文件,然後重新加載應用程序?
預編譯的資產應該保持原樣;預編譯(不重編譯)。由於可能存在不一致(在寫入時讀取),強制執行資產編譯和運行時並不是一個好主意(也不是一個好習慣)。您應該將它們放在視圖中,這些視圖會在運行時編譯並提供。您也可以使用[Rails緩存](http://guides.rubyonrails.org/caching_with_rails.html)。 – Wikiti
好的,只有在管理工作時重新編譯。在幾次。感謝您對該問題的看法。但它可以做到這一點? –
我不確定資產管道是否可以被運行時訪問。您可能需要創建一個新的控制器來提供這些文件,並在demmand上進行預編譯。 – Wikiti