0

シナリオは次のとおりです。

私のページのほとんどは、デフォルトの Rails に従って 1 つの大きな CSS ファイルにコンパイルされるさまざまなページの CSS を使用していますが、問題はありません。

しかしactions、別の CSS ページを使用する必要があるコントローラーにあるいくつかのページがあり、他のページはまったく使用されません。これらは、それ以外の場合はメインのデフォルトのコンパイル済み CSS を使用するコントローラーの約 3 つのアクションです。

これを実現するために、別のページが必要なアクションに対して特定のレイアウトを呼び出します。

  format.html { render :layout => 'doghouse_template' }

これdoghouse_templateには、頭に次の呼び出しがあります。

  = stylesheet_link_tag "doghouse_page"

これは、必要に応じてページがオンザフライでコンパイルされる開発環境では問題なく動作しますが、本番環境では次のエラーが発生します。

ActionView::Template::Error (doghouse_page.css isn't precompiled)

これは、doghouse_page.cssが個別にコンパイルされていないためです。メインの application.css ファイルにコンパイルされているため、もちろん、フォルダーには存在しませpublic/assets

また、これdoghouse.cssは実際には CSS ページではなくSCSSpublic/assetsであるため、何らかのタイプをコンパイルせずにコピーすることはできません。

私の質問は、ここでの解決策は何ですか?

これらに application.css ファイルを使用することはできません。犬小屋のページと呼びましょう。スタイルが台無しになるためです。

ファイルをapplication.rbに入れてみました:

config.assets.precompile += %w( doghouse_page.css.scss )

しかし、違いはありません。一方、私が置くと:

config.assets.precompile += %w( *.css )

bootstrap/_accordion.scss ファイルが原因でプリコンパイル時にエラーが発生するため、それを行うことはできません。

ここで非常によく似た質問を見てきましたが、それらはコントローラー全体に異なる CSS を使用することに適用される傾向があり、すべてのページを 1 つにコンパイルしない方法はどこにも指定されていません。

すべての CSS ページを分離したくないことに注意してください(表向きは 1 つの解決策です)。この 1 つのページだけを分離します。

ありがとう。

4

1 に答える 1

1

これを行うだけでよいはずです (doghouse_page.css.scss がファイルであっても、.scss がないことに注意してください)。

config.assets.precompile += %w( doghouse_page.css )

可能であれば、私はこれを行うことを検討します。私にとってはうまくいきました。doghouse_page.css.scss を「extra」のフォルダーに移動します。それで:

config.assets.precompile += %w( extras/*.css )

次に、 app/views/layout/application... ファイルで、コントローラーとアクションの body タグにクラスを追加します。以下は、私のプロジェクトの 1 つで使用する HAML バージョンです。

%body{:class => ["c-#{controller_name}", "a-#{action_name}", I18n.locale]}

次に、doghouse_page.css.scss を調整して、適切なコントローラー/アクション クラスを含む body タグの下にスコープを設定します。

私の場合、通常、いくつかのものをオーバーライドするか、いくつかのものを追加して、application.css.scss にあるもののほとんどを保持したいだけです。これはうまくいかないかもしれませんが、うまくいく場合は、個々のページ/アクションをカスタマイズするためのかなりクリーンな方法です.

于 2013-08-30T15:29:44.340 に答える