css.scss.erbファイルをコードに使用しています。モデルへのこのファイルアクセスは、各ループを繰り返して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%>
私たちは、このinsueための設定/初期化子/ 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