1

アセット パイプラインを有効にして、Rails 3.1 のメンテナンス ページでアセットにアクセスするにはどうすればよいですか?

アセット パイプラインを有効にすると、すべてのアセットのファイル名にハッシュが含まれます。ただし、メンテナンス ページは一般的な HTML であり、rails/passenger は apache 構成によってバイパスされているため、正しいアセット パスを生成する方法がありません。

application.css と画像ファイルが必要です。それらが古いものであれば問題ありません。

私はいくつかのクラッジを考えることができますが、それらはすべて不自由です:

  • デプロイごとに、必要なアセットを、メンテナンス ファイルで使用する一般的な名前にシンボリック リンクします。
  • メンテナンス ページを動的にして生成し、マークアップをどこかにダンプしてから、メンテナンスの「デプロイ」スクリプトを変更します。
4

3 に答える 3

1

シンボリックリンクまたは動的(erb)ページを避けたい場合は、静的テンプレートを使用して、展開中にこれを変更します。

  1. まず、メンテナンスページテンプレートを作成します。

  2. デプロイ中に、プリコンパイルプロセスによって作成されたmainfest.ymlファイルを読み取ります。

  3. メイントページのテンプレートを読んでください。

  4. テンプレートで指定されたファイルを、マニフェストのハッシュバージョンに置き換えます。

  5. 変更したテンプレートをファイルシステムに書き出します。

于 2011-09-25T04:19:59.347 に答える
1

誰にとっても便利なように、私は自分のプロジェクトで Richard のソリューションを採用し、静的な HTML エラー/メンテナンス ページのアセット リンクを置き換える単純な ruby​​ スクリプトを作成しました。可能な限り高速になるように、レーキ タスクではなく意図的に実行されます。とにかく、Rails ルート ディレクトリから実行する必要があることを除けば、Rails への依存関係はありません。

#!/usr/bin/env ruby

require 'yaml'

GLOBS = %w(public/errors_source/*.html)
MANIFEST = "public/assets/manifest.yml"

manifest = YAML::load(File.open(MANIFEST))

GLOBS.each do |glob|
  Dir.glob(glob).each do |file|
    next unless File.file?(file)
    contents = File.read(file)

    manifest.each do |asset, compiled_asset|
      contents.gsub!(asset, "/assets/#{compiled_asset}")
    end

    File.open(file.gsub('errors_source/',''), 'w') do |outfile|
      outfile.write(contents)
    end
  end
end

このスクリプトは、静的な HTML エラー/メンテナンス ページがディレクトリの下に存在することを想定し、errors_sourceそれらを (ハッシュ バージョンに置き換えられたアセットと共に) rails ルート ディレクトリにコピーします。

サンプルのメンテナンス ページは次のようになります (CSS アセット リンクとロゴ イメージに注意してください。これらのアセットは単にメインの Rails コードと共有されています)。

<html>
<head>
    ...
    <link href="application.css" media="screen" rel="stylesheet" type="text/css"/>
</head>

<body>
    ...
    <a href="/"><img src="logo.png" width="161" height="61"/></a>
    ...
</body>
</html>
于 2012-10-12T07:46:23.077 に答える
1

Heroku を使用している場合は、Trackman というアドオンがあります。すべてのアセットをリンクすると、ページとアセットが S3 にデプロイされます。コードを書く必要はほとんどありません。gem 内のユーティリティを使用して、dev を簡単にすることもできます。

http://www.trackman-addon.com

于 2012-10-17T22:24:22.607 に答える