5

のような相対パスを使用して画像を参照する CSS ファイルがいくつかありますurl( "../img/my_image.jpg" )

すべての CSS ファイルが 1 つのファイルにパックされ、構造が失われ、相対パスも失われ、画像が見つからないため、すべてdevelopmentが環境内で機能します。production

私の構造の詳細

私は次のような資産構造を持っています:

/app
  /assets
    /plugins
      /my_plugin
        /img
          my_image.jpg
        /css
          my_css.css

(/my_pluginのグループである任意のプラグインcssjsおよびimagesTwitter Bootstrap のようなその他のファイルにすることができます)

には、次の/app/assets/plugins/my_plugin/my_css.cssようなものがあります。

background-image: url("../img/my_image.jpg");

/app/assets/stylesheets/application.css

*= require css/my_css.css

そして最後にhead私のhtmlファイルの:

<%= stylesheet_link_tag "application" %>

問題を解決するにはどうすればよいですか?

アップデート

問題を再現するためのミニ アプリケーション。READMEには、問題をインストールして再現するための指示があります。

4

2 に答える 2

8

CSS ファイルの連結に問題はありません。また、深くネストされた CSS ファイルを手動で含める必要はありません。デフォルトでは、application.css はすでに行でこれを行っています。*= require_tree .

そしてイメージはあなたの構造を繰り返しますapp/assets/images。開発環境と本番環境の両方でそれらを正しく処理するには、それぞれのガイドがあります。そのセクション2.2 Coding Links to Assets を確認してください。画像ファイルへのコーディング パスに関する説明があります。

ERb 経由の CSS:

 url(<%= asset_path 'image.png' %>)

Sass 経由の CSS:

 image-url("rails.png")

プリコンパイルされたイメージの末尾にあるこれらすべての奇妙な 16 進文字は、自動的に尊重されます。

UPD

プラグインにアセット パイプライン機能はまったく必要ないようです。スタイル/スクリプトは既に縮小されています。pluginsフォルダを自分のフォルダに移動できpublicます ( になります<APP_ROOT>/public/plugins/)。

次に、次の行を から削除application.cssします。

*= require bootstrap/css/bootstrap

代わりに、次の行をテンプレートに追加application.html.erbします。

  <%= stylesheet_link_tag    "/plugins/bootstrap/css/bootstrap.min.css", :media => "all" %>
  <%= javascript_include_tag "/plugins/bootstrap/js/bootstrap.min.js" %>

public/plugins/bootstrapのコンテンツを置き換えることで、テーマを簡単に切り替えることができなければなりません。

更新 2

おそらく、Railsプラグイン アセットprecompileを明示的に伝える必要があります。

# /config/environments/production.rb
config.assets.precompile += %w( bootstrap/css/bootstrap.css )
于 2012-09-02T14:16:38.497 に答える
2

プラグイン アセットは、アプリケーションに直接関連するアセットではなく、ベンダー/app/vendor/assets/pluginsアセットに影響するため、より適切な場所に移動することで問題を解決できました。

次に、次のようになります。

/app
  /vendor
    /assets
      /plugins
        /my_plugin
          /img
            my_image.jpg
          /css
            my_css.css

cssそして、次のように別のstylesheet_link_tag呼び出しでメインをロードします。

<%= stylesheet_link_tag "my_plugin/css/my_css", :media => "all" %>

現時点ではすべてが正しいように見えますが、Railsmy_css.cssは、実行してもコンパイルされていないと文句を言っていますrake assets:precompile

解決策は、このファイルをコンパイルするようRailsに明示的に指示することです。

# /config/environments/production.rb
config.assets.precompile += %w( my_plugin/css/my_css.css )

これでrake assets:precompileプラグイン css がコンパイルされ、production環境は相対 URLでも適切に動作します。

問題を解決した差分の変更を確認します

于 2012-09-02T19:40:50.613 に答える