私が見つけた最善の解決策は、HTML テンプレート ファイルにアセット パイプラインを使用しないことです。
代わりに、呼び出されるコントローラーTemplatesController
を作成し、アクションを 1 つだけ作成します。次に、次のようなルートを使用して、すべてのテンプレート URL をそれにマップします。
get /templates/:path.html => 'templates#page', :constraints => { :path => /.+/ }
次に、すべてのテンプレート ファイルを次の場所に移動します。app/views/templates
次に、コントローラー内で、次のようにセットアップします。
caches_page :page
def page
@path = params[:path]
render :template => 'templates/' + @path, :layout => nil
end
このようにして、すべてのテンプレート ファイルがコントローラーから提供され、public/templates にキャッシュされます。キャッシュの問題を回避するために、テンプレート ルートへのタイムスタンプ パスを作成して、キャッシュされたファイルがバージョンと共に配信されるようにすることができます。
get '/templates/:timestamp/:path.html' => 'templates#page', :constraints => { :path => /.+/ }
このようにして、Web サイトをアップロードするたびに新しいタイムスタンプを取得し、テンプレート フォルダーを好きな場所に保存できます。テンプレート フォルダーを S3 に保存して、そのためのアセット URL を設定することもできます。次に、テンプレート ファイルがアドレス指定されている場所であればどこでも、カスタム アセット メソッドを使用できます。
templateUrl : <%= custom_asset_template_url('some/file.html') %>
どこ:
def custom_asset_template_url(path)
"http://custom-asset-server.website.com/templates/#{$some_global_timestamp}/#{path}"
end
次に、アセットが見つからない場合はRailsサーバーにリダイレクトするだけで、アセットが生成されます。または、アップロード後にすべてのテンプレート ファイルを事前に生成することもできます。