3

Ruby on Rails 4 でサイトを開発していますが、一部の CSS ファイルへのパスに問題があります。

applicaiton.sassファイルに含まれていない次のアセットがあります。

  • mobile.scss
  • mozilla.scss
  • msie.scss
  • オペラ.scss
  • webkit.scss

application.rb以下を使用してプリコンパイルするようにそれらを含めました。

config.assets.precompile += [
  'mobile.css',
  'mozilla.css',
  'msie.css',
  'opera.css',
  'webkit.css'
]

実稼働サーバーで次のコマンドを実行しました (注:touchサーバーとして Nginx で Phusion Passenger を使用しているため、コマンドはアプリが再起動してキャッシュをクリアすることを確認するためのものです)。

rake assets:precompile RAILS_ENV=production
touch tmp/restart.txt

public/assets/上記のコマンドを実行した後、アセットがプリコンパイルされ、ディレクトリに存在することに気付きました。それらはmanifest.json、ディレクトリ内のファイルにも正しくリストされていますpublic/assets/

ブラウザにサイトをロードしてソース コードを確認すると、ブラウザ固有の CSS ファイルが正しいアセット パスを使用していないことに気付きました。それが示している:

<link href="/assets/application-ec1031f251a585c79d4404ef2899f6d1.css" media="screen" rel="stylesheet" />
<link href="/stylesheets/webkit.css" media="screen" rel="stylesheet" />

私が見ることを期待している間:

<link href="/assets/application-ec1031f251a585c79d4404ef2899f6d1.css" media="screen" rel="stylesheet" />
<link href="/assets/webkit-70899fec75bb8eae24edae491a94f73a.css" media="screen" rel="stylesheet" />

私のビューは次のコードを使用しています。

<% if @mobile %>
  <%= stylesheet_link_tag :mobile %>
<% else %>
  <%= stylesheet_link_tag :application %>
  <%= stylesheet_link_tag :msie if @browser == 'Internet Explorer' %>
  <%= stylesheet_link_tag :opera if @browser == 'Opera' %>
  <%= stylesheet_link_tag :mozilla if @browser == 'Mozilla' %>
  <%= stylesheet_link_tag :webkit if @browser == 'Webkit' %>
<% end %>

私の質問は、webkit.cssパスが正しく出力されるべきではないか、それとも何か不足していますか? どんな助けでも大歓迎です。

4

2 に答える 2

1

プロダクション モードでアセットをプリコンパイルすると ( Rails アセット パイプライン ガイドに従っていると仮定すると、以下のすべてのアセットapp/assetsが にコンパイルされapplication.cssます。したがって、ここにリストされているすべてのファイルは既に にありますapplication.css

config.assets.precompile += [
  'mobile.css',
  'mozilla.css',
  'msie.css',
  'opera.css',
  'webkit.css'
]

通常、HTTP 要求と応答はアプリのプロセスの中で最も遅い部分であるため、複数の小さなファイルよりも 1 つの大きなファイルを読み込む方が高速であるため、この方法をお勧めします。

コードごとにブラウザーの種類に基づいて条件付きでスタイルシートを含める必要がある場合は、次のいずれかを行います。

  1. のアセット パイプライン マニフェストからそれらを削除しapplication.css、CSS ファイルをapp/assets/stylesheetsディレクトリに残してから、上記のようにそれらを含めます。
  2. CSS ファイルをアセット パイプライン ディレクトリの外に移動し、上記のビュー コードに含めます。このように、それらはファイルにコンパイルされず、application.css個別にロードできます

これらのオプションのいずれかが、アセット パイプラインの主な目的の 1 つを無効にすることに注意してください。

于 2013-11-10T00:14:49.597 に答える
0

少し明白すぎて申し訳ありませんが、あなたの production.rb に次のように述べていますか?

config.serve_static_assets = true
于 2013-11-09T23:52:47.330 に答える