ActionControllerを変更することでJammitを使用したHerokuでの静的資産キャッシング:: Base#page_cache_directory
-
12-11-2019 - |
質問
Herokuに搭載されているRailsアプリのためのCSSとJSの梱包にJammitを使用しようとしています。これを行う方法の見たすべての例では、すべてのパッケージ化された資産ファイルを事前に構築することをお勧めします。 HerokuのGitベースの展開のため、これはこれらのファイルが変更されるたびにあなたのリポジトリに別のコミットをする必要があります。これは私にとって許容できる解決策ではありません。代わりに、JammitがCachedパッケージを#{Rails.root}/tmp/assets
に書き込むために使用するパスを変更したいです。
キャッシュされたパッケージのデフォルトパスを使用しても、キャッシュされたファイルが毎回レールスタックを叩くことなくキャッシュされたファイルがどのように使用されるかです。私に私が何を意味するのか説明しましょう:
Jammitのヘルパーを使ってパッケージを含めると、次のようになります。
<%= include_javascripts :application %>
.
このスクリプトタグを生成する:
<script src="/assets/application.js" type="text/javascript"></script>
.
ブラウザがこのURLを要求するとき、実際にはActionController::Base#page_cache_directory
にルーティングされることが、パッケージの内容をブラウザにレンダリングし、キャッシュされたコピーをJammit::Controller#package
に書き込みます。このアイデアは、このキャッシュされたファイルが最初の要求に基づいて構築され、後続の要求はRails Stackを押すことなく直接キャッシュされたファイルにサービスを提供する必要があります。私はジャムのコードを見て、私はこれがどのように起こるべきか見ていません。後続の要求が#{page_cache_directory}/assets/application.js
に再度/assets/application.js
にルーティングし、キャッシュされたファイルを使用しないでくださいか?
私の推測は、どこかにラックミドルウェアがあるということです。その場合は、そのコードはどこですか?そして、Jammit::Controller
を変更するときにどのように機能するのでしょうか(Jammitがキャッシュされたパッケージを書き込むところで効果的に変更します)。 ActionController::Base#page_cache_directory
はパブリックドキュメントルートの上にあるので、そのパスにマップするURLはありません。
解決
素晴らしい質問!私はこれを私自身で設定していませんが、それは私が覗くことを意味してきたことですので、そうするように促しました。これが私が試してみることです(私はすぐに自分自身の撃たれるだろうが、あなたはおそらく私をそれに倒すつもりです)。
config.action_controller.page_cache_directory = "#{Rails.root}/tmp/page_cache"
.
config.ruを変更する:
require ::File.expand_path('../config/environment', __FILE__)
run Rack::URLMap.new(
"/" => Your::App.new,
"/assets" => Rack::Directory.new("tmp/page_cache/assets"))
.
public/assets
には何も持っていないことを確認してください。
注:
- これはRails 3用です.3。Rails 2の下の解決策がわからない。
-
Rack::Directory
のように見えるように見えるように、Herokuはあなたの資産をワニスにキャッシュします。Jammitがコントローラにこれを設定した場合はわかりませんが、それがそうでない場合でも、それは非常に早くキャッシュされます。 - Herokuは、
ENV['TMPDIR']
も現在も設定しているため、希望の場合はRails.root + '/tmp'
の代わりに使用できます。
他のヒント
これは使いやすいかもしれません、それは別の宝石のためのものですが、アイデアは似ていて、私はそれを平野のアセットヘルパーと一緒に取り入そうとしています。
http://devcenter">/artlics/using-compass / P>
残念ながら、資産ヘルパーモジュール(結合スパゲッティ類似)をパッチ/書き換えることなく、これを行うようにRailsを得ることは非常に困難であるようです。