3

Rails 3.1 アプリでは、1 つのコントローラーで、一連のカスタム変数を使用して、要求ごとに必要な Sass スタイルシートをすべてのビューでコンパイルする必要があります。理想的には、コンテンツ ベースのアセット名 (コンテンツの MD5 ハッシュを含むもの) が生成されるように、アセット パイプラインを介してコンパイルを行う必要があります。ソリューションでは、Sass スタイルシートの ERB 処理などに頼るのではなく、純粋な Sass 機能を使用することが重要です。

私がここや他の場所で行った調査から、次の方法が可能なアプローチのようです。

  1. 変数アクセスの設定

    • たとえば、 Konstantin Haase がここ ( gist )説明しているように、カスタム Sass 関数を使用して、ある種の変数アクセサー ブリッジを作成します。これはかなり簡単にできそうです。

    • Sassパーシャルを介してすべての変数アクセスを構成します。たとえば、_base.sassコンパスの方法です。パーシャルは、上で定義したカスタム関数を使用できます。また、簡単です。

  2. すべてのアセット参照をキャプチャ

    • asset_pathビューオブジェクトのメソッドをデコレートします。私はこれをうまく機能させています。

    • のカスタム サブクラスを使用して参照を解決しますSprockets::Environment。これもうまく機能しています。

  3. ファイルの変更時間に関係なく、アセットの再コンパイルを強制する

    • 私はまだこれに対する良い解決策を見つけていません。

    • Sass::Engine新しいをインスタンス化し、 で利用できるようになるカスタム データを渡すことで、Sass 処理を手動で開始する例を見てきましたSass::Script::Functions::EvaluationContext。このアプローチの問題点は、ファイルの命名とパスを自分で管理する必要があり、常に Sprockets の機能から逸脱する可能性があることです。

    • ファイルの mod 時間に関係なく、リクエストごとに Sprockets の処理を​​強制する例を見つけることができませんでした。これにより、カスタム変数の受け渡しも可能になります。

一般的なアプローチに関するコメントと、(3) を最適に処理する方法に関する特定のポインター/提案​​をいただければ幸いです。

4

2 に答える 2

1

SASS は、CSS にプリコンパイルされるように設計されています。リクエストごとにビューのすべてのリクエストに対してスプロケットにこれを実行させると、あまりうまく機能しません。すべてのリクエストは、コンパイルが完了するまで待機する必要があり、高速ではありません (サービングページの観点から)。

MD5 生成は Sprockets 内にあるため、カスタム変数を変更する場合は、ビューが (おそらく) 認識しないため、すべてのリクエストで強制的にコンパイルを実行して変更が表示されるようにする必要があります。

これは実際にはアセット パイプラインのスイート スポットではないように思われます。真に動的な CSS 用にさらに最適化することを検討する必要があります。

ごめん。:-)

于 2011-12-05T06:02:33.093 に答える
1

シム。

可能です。ここを見てくださいSASS:コンパイル時に変数を設定する

私はそれに対処するための解決策を書きました。あなたまたは他の誰かがまだそれを必要とする場合に備えて、すぐに投稿してここにプッシュします.

于 2012-07-11T13:58:44.967 に答える