18

セクション 2.2.2 「CSS と Sass」image-url('delete.png')で、sassを入れるように言われました。そして、私は持っています。

ただし、CSSのようなものを生成しています

background-image: url(/images/delete.png)

どこにでも生成されるべきだと言われたものの代わりに、正しくて明白なもの、

background-image: url(/assets/delete.png)

何。一体。

私はこれがどこから来ているのかを理解しようと文字通り何日も費やしました.

この動作につながる関連設定の要点を次に示します。これは、以前のバージョンのコード ベースの同じファイルの要点です(アセット パイプラインを実装した直後で、実際には約 1 週間動作した後、この苛立たしい動作が発生しました)。違いがわかりますか?これを引き起こしていると考えられる他のファイルはありますか?

ノート

  • sass-rails新しいバージョンではStack level too deep!プリコンパイル時にエラーが発生していたため、意図的に古いバージョンの を使用しています。
  • コンパスを使用しています。

回避策での 2 つのハッキングの試み

実際にアセット パイプラインのトラブルシューティングを行うのはちょっと面倒だからです。

1: /images に画像を入れる

public/imagesすべての画像を移動して、それをロードパスとして追加しようとしました。これは dev で機能しました (画像は または のいずれかでアクセスできます/assets)/imagesが、本番用にプリコンパイルするとフィンガープリント化された画像が/assets(obvs) にのみ配置されるため、sass-rails が に配置するとurl(/imagse/delete-120398471029384102364.png)、それが見つかりません。

2: /public/images を /public/assets へのシンボリックリンクにする

これはおそらく本番環境では機能しますが、開発環境では /assets フォルダーが存在しないため、url(/images/delete.png)ディレクティブによって画像が見つかりません。

4

8 に答える 8

10

これをまだ持っていない場合は、cssファイルに名前を付けます*.css.scss.sassこれを行う場合は、一部のステートメントの構文を調整する必要がある場合があります)。次に、のimage_path代わりにヘルパーを使用しますimage-path。例:

background-image:url(image_path('delete.png'));

これで問題が解決することを期待しています。そうでない場合、このアプローチによって生成されるアセットパスは何ですか?

于 2012-06-21T15:57:29.240 に答える
8

これは、sass-rails (3.1.0) のバージョンが原因のようです。問題を再現できます (Gemfile を投稿していただきありがとうございます)。sass-rails 3.1.4 にぶつかると問題は解決します。

3.1.4 にアップグレードしてクリアしてみてくださいtmp/cache。また、ブラウザのキャッシュにアクセスしていないことを確認してください。

3.1.4 が他の問題を引き起こしているとおっしゃっていましたが、それより新しいバージョンを試してみましたか?

于 2012-06-24T01:12:56.487 に答える
2

これは、haml-rails、compass、および sass-rails の組み合わせです。ただし、Rails 3.2.6 を実行しています。これは私たちにとってうまくいきました。

宝石「コンパス」、git:「git://github.com/chriseppstein/compass.git」、ref:「3a4c5c75dca9f07f6edf2f0898a4626269e0ed62」

gem 'haml-rails', git: 'git://github.com/indirect/haml-rails.git', ref: '92c41db61f20a9f122de25bc73e5045cfccdbcd5'

gem 'sass-rails', '~> 3.2.5'

于 2012-06-20T21:50:55.413 に答える
2

それは本当にこの問題のように見えます: https://github.com/rails/sass-rails/issues/57 その場合、Compass と Sass-rails の間でバージョンの適切な組み合わせを見つけるようにしてください。

そして、すべて (Rails を含む) を最新バージョンにアップグレードするのが最善の方法です (bundle outdatedバンドラー 1.2 のコマンドを使用して、アップグレードする Gem を確認します)。

于 2012-06-20T21:41:53.603 に答える
0

必ずしも解決策ではありませんが、確かに利用可能なオプションです。コンパス スプライトを使用する場合は、http リクエストの数を削減し、スプライト マップを使用して画像パスを手動で指定できます。 : sprite-map("PATH/*.png");'

于 2012-06-26T14:25:53.927 に答える
0

現在のアセット パイプラインでファイルのサニティ チェックを行います。ここにリストされているディレクトリのいずれかにあることを確認してください。

<%= debug Rails.application.config.assets.paths %>

次に、コンパスが画像を見つけると予想する相対パスを確認します(そして、それがマットかどうかを確認します。コンパス構成ドキュメントによると、これらのいずれかがあなたに伝えるはずです:

<%= debug config.compass.http_images_path %>
<%= debug config.compass.http_generated_images_path %>

多分最初だと思います。いずれにせよ、それらのパスを画像の asset_path と比較してください。

<%= debug asset_path 'delete.png' %>

パスが一致しない場合は、環境設定 (development.rb など) のパスを次のように調整する必要があるかもしれません。

config.compass.http_images_path = '/assets.

あるいは、画像を http_images_path または http_generated_images_path が期待する場所に移動することもできます。

この時点で、asset_path/asset_url (ハードコーディングよりもはるかに脆弱ではない) がうまく機能するはずです。これは、スタイルシートで見た同様の手法に基づいています。

于 2012-06-28T00:12:17.613 に答える