1

Rails 3.2 を実行しています。ThemeRoller ギャラリー (http://jqueryui.com/themeroller/) から「cupertino」テーマを統合しました。可変テーマは Rails 3.2 ではまだサポートされていないため、cupertino 画像を にコピーし./app/assets/images/images、cupertino CSS スタイル シートを に配置しました./app/assets/stylesheets/cupertino.css.scss

application.css には何も追加していません。私の理解では、asset-pipeline は .xml の下にある SCSS ファイルをプリコンパイルするだけです./app/assets/stylesheets。ここまでは順調ですね。ではapplication.rb、適切なプロパティを true に設定しています。

config.assets.enabled = true

ここからが興味深いところです。たとえば、jQuery の日付ピッカーをポップアップしても、クパチーノのテーマは表示されません。Ok。これは簡単に対処できます。Cupertino スタイルへのリンクを明示的に宣言するだけです。

<%= stylesheet_link_tag "cupertino" %>

私の開発環境では、これはうまくいきます!jQuery の datepicker を再び上げると、cupertino テーマが表示されます。HTML ビューを開くと、対応するクパチーノ スタイルを選択するリンク ディレクティブが表示されます。

<link href="/assets/cupertino.css" media="screen" rel="stylesheet" type="text/css" />

私の運用環境では、stylesheet_link_tag動作しません! これは、アセットが本番環境でプリコンパイルされており、Rails が「キー付き」バージョンの cupertino.css を見つけられないためだと思います。つまり、stylesheet_link_tag適切に機能した場合、次のようなことが期待されます。

<link href="/assets/cupertino-40e24d89d5768c02a1373032957ebd02.css" media="all" rel="stylesheet" type="text/css" />

そこで、アセットをプリコンパイルするプロダクション ログを確認します。何だと思う?cupertino はプリコンパイル済みです。

$ tail -100 log/production.log
...
Compiled cupertino.css  (729ms)  (pid 5325)
...

<%= stylesheet_link_tag "cupertino" %>このディレクティブを、キーなしバージョンの cupertino スタイル シートをロードする明示的なリンク ディレクティブに置き換えます。

<link href="/assets/cupertino.css" media="screen" rel="stylesheet" type="text/css" />

それはうまくいきます!開発と生産の両方で。しかし謎は深まる。本番環境では、 のキー付きバージョンapplications.css、つまりコンパイル済みのすべてのスタイルを開きます。を検索しcupertinoます。何だと思う?cupertino スタイルはプリコンパイルされています。圧縮されプリコンパイルされたリソースから巻き戻したスタイルの 1 つを次に示します。

.ui-icon {
    width:16px;
    height:16px;
    background-image:url("/assets/jquery-ui/cupertino/ui-icons_72a7cf_256x240-cd87f27304052bb2d63abd3680bb2bbd.png")
}

パスに関連する問題がすぐにわかります。私が見た他のコメントに基づいて驚くべきことではありません。./app/assets/images/imagesからに画像を移動し./app/assets/images/jquery-ui/cupertinoます。同じ問題が再発します。同じ解像度で問題が解決します。

質問cupertino.css:すべての証拠がリソースがプリコンパイルされたことを示唆しているにもかかわらず、フィンガープリント バージョンの が本番環境で見つからないのはなぜですか?

4

2 に答える 2

0

だから、ここに欠けている魔法があります。Richard Hulse の提案に従って、マニフェスト ファイルに移動し、application.css次の行を追加します。

 *= require cupertino

と wola!、cupertino はプリコンパイルされています。

$ ls -c1 ./public/assets/cupertino*
./public/assets/cupertino-3235459a735b4f142b96270d04b2626e.css
./public/assets/cupertino-3235459a735b4f142b96270d04b2626e.css.gz
./public/assets/cupertino.css
./public/assets/cupertino.css.gz

Web アプリケーションをデプロイした後、このディレクティブは運用環境と開発環境の両方で正しく機能します。

<%= stylesheet_link_tag "cupertino" %>
于 2012-06-17T23:57:29.580 に答える
0

ファイル名をプリコンパイル配列に追加して、本番環境で使用することを Rails に伝える必要があります。これは production.rb にあります:

config.assets.precompile += %w(cupertino.css)
于 2012-06-15T20:26:01.047 に答える