Rails 3.1と画像アセット


156

adminテーマのすべての画像を、adminというフォルダー内のアセットフォルダーに配置しました。次に、通常のようにリンクします。

# Ruby    
image_tag "admin/file.jpg" .....
#CSS
.logo{ background:url('/assets/images/admin/logo.png');

ご参考までに。テストのためだけに、アセットをコンパイルしていないので、asset_pathタグ​​はまだ使用していません。

これまでのところ、画像の更新を決定するまでは問題ありません。一部の色を置き換えましたが、再読み込み時に新しいスタイルの画像が表示されません。ブラウザで直接画像を表示すると、まだ古い画像が表示されています。さらに一歩進んで、管理イメージフォルダーを破棄しました。しかし、すべての画像がまだ表示されているのに問題はありません。そして、はい、キャッシュをクリアして、複数のブラウザで試しました。

何らかの画像キャッシングが行われていますか?これは、powを使用してページを提供するローカル開発です。

画像フォルダ全体を破棄しても、画像は引き続き提供されます。

何か不足していますか?


2
これは、アセットパイプラインを使用する3.1では当てはまりません。これらのファイルを圧縮してパブリックファイルに移動するコマンドrake assets:precompileを使用します
Lee

2
それらをパブリックフォルダーに移動することはうまくいきましたが、アセットフォルダーから提供されるのでうまく機能するので少し奇妙です。3.1のドキュメントが増えるのを待つ必要があるかもしれません。
Lee

3
ご不便をおかけして申し訳ございません。どうやらリリース候補はあまり文書化されていません。
tybro0103

1
アセットに入れたままにします。フォルダパスはまったく含めないでください。以下の私の答えを参照してください。
Andrew

回答:


226

3.1では、パスの「イメージ」の部分を取り除くだけです。したがって、/assets/images/example.png実際に存在する画像は、このURLのgetリクエストで実際にアクセスできます-/assets/example.png

assets/imagesフォルダーは新しい3.1アプリと一緒に生成されるため、これはおそらくユーザーが従うべき規則です。私image_tagはそれがそれを探す場所だと思いますが、私はまだそれをテストしていません。

また、RailsConfの基調講演の中で、D2hはpublic folder、ほとんどエラーページとファビコンだけではなく、もうほとんど必要ないことを言ったのを覚えています。


ええ、私はこの割り当てで遊んだことがあり、それを簡単にするためにいくつかの方法があります。はい、私のアセットフォルダーに入れても機能しますが、アセットタグを使用できます。だから私はもっと多くの情報が出てくるのを見るのを待っています。
リー

1
ありがとう、私もたくさん助けてくれました。これは、他のWeb開発フレームワークから来たRailsを学ぼうとする男として、私を狂わせるようなものです。
jn29098 2012

6
2つの異なるフォルダに同じファイル名が含まれている場合はどうなりますか?
Hady Elsahar、2013年

6
DH2じゃないの?
Tiago Franco

1
なぜ彼らはすでに機能しているものを変更しなければならなかったのか分かりません。
Tastybrownies 2013

98

あなたはからあなたのCSSファイルの拡張子を変更したいと思う.css.scss.css.scss.erbと実行します。

background-image:url(<%=asset_path "admin/logo.png"%>);

変更を確認するには、「ハードリフレッシュ」を行う必要がある場合があります。OSXブラウザではCMD + SHIFT + R。

本番環境では、

rm -rf public/assets    
bundle exec rake assets:precompile RAILS_ENV=production

展開時に発生します。


44
sassに新しいイメージヘルパーがあります:image_url、image_path、...ここでもっと見つけることができます:edgeguides.rubyonrails.org/asset_pipeline.html erbをプリプロセッサとして使用する必要はもうありません
Martin Wawrusch

1
sass-railsヘルパー(image_urlおよびimage-url)をcss.scssファイルに試しましたが、解釈されないようです。どんな手掛かり ?
invaino 2011

2
生成されたscssファイルの名前はデフォルトで.css.scssで、ベッドのシッティングはまだ発生していません
Adrian Macneil

2
何らかの理由でimage-urlが機能しませんでしたが、asset-url( 'myimage.png'、image)は完全に機能しました。(Rails 3.1)
Elad

1
3.0から誰もアップグレードが疑問に思っている場合には、あなただけで、あなたのスタイルシートの名前を変更することができます.css.css.erb、あなたがにそれらを移動した後(app/assetsSASSなしERB処理を取得する。
ウィリアム・Denniss

22

価値があるのは、これを行ったときに、cssファイルのパスにフォルダーを含めてはならないことです。たとえば、私が持っている場合app/assets/images/example.png、これをcssファイルに入れます...

div.example { background: url('example.png'); }

...そして、どういうわけかそれは魔法のように動作します。これrake assets:precompileは、すべてのロードパスからすべてを吸い取り、ジャンクドロワーフォルダーにダンプするタスクを実行することでわかりましたpublic/assets。皮肉なことに、IMO ...

いずれにせよ、これはフォルダーパスを配置する必要がないことを意味します。アセットフォルダー内のすべてのものがすべて1つの巨大なディレクトリに配置されます。このシステムがファイル名の競合をどのように解決するかは不明ですが、注意が必要な場合があります。

この大きな変更のためのドキュメントは他にはありません。


3
名前の競合がある場合、config.assets.paths配列に表示される最初のパスは、選択されたファイルです。これは、asset_path()ヘルパーを使用してディレクトリを指定することで回避できます。
Joseph Ravenwolfe

6
CSSファイルと画像が同じ場所にあるため、これは「魔法のように機能します」。CSSファイルの参照は、cssファイルの場所を基準にしています。
ビルリーパー、

アセットパイプラインは、特にフロントエンドの開発者にとってはブラックボックスのように見えますが、ファイルパスや自動キャッシュバスティングについて心配する必要がないなど、多くの優れた機能を提供します。
マイル

16

rails 4では、cssおよびsassヘルパーのimage-urlを使用できるようになりました。

div.logo {background-image: image-url("logo.png");}

背景画像が表示されない場合は、スタイルシートで背景画像をどのように参照しているかを確認してください。


1
これは正しいです(レール4の場合)。この回答を投票してください!
ahnbizcad 2014年

Railsは、urlキーワードと文字列を入力することで「手助け」します。これは、次のようなことができることを意味します。div.logo {background: image-url("logo.png") no-repeat center;}
Antony Denyer

10

CSSまたはIMGタグで画像を参照する場合は、image-name.jpgを使用します

画像は実際には./assets/images/image-name.jpgの下にあります


CSSに関してはこれは間違っていると思います-使用するときにrails 3.1.0.rc4を使用するbackground: url('sort_asc_disabled.png')と、ファイルapp / assets / images / sort_asc_disabled.pngで機能します。
素晴らしい

2

http://railscasts.com/episodes/279-understanding-the-asset-pipeline

このRailscast(アセットパイプラインに関するRailsチュートリアルビデオ)は、アセットパイプラインのパスについても説明するのに役立ちます。とても便利だと思って、実際に数回見ました。

私が選んだソリューションは上記の@Lee McAlillyですが、このRailscastはそれが機能する理由を理解するのに役立ちました。それが役に立てば幸い!


0

Railsのアセットパイプラインは、まさにこのための方法を提供します。

image_path( 'image filename')をcssまたはscssファイルに追加するだけで、railsがすべてを処理します。例えば:

.logo{ background:url(image_path('admin/logo.png'));

(これは.erbビューと同じように機能し、パスで「/ assets」または「/ assets / images」を使用しないことに注意してください)

Railsは他のヘルパーメソッドも提供しており、ここに別の答えがあります:Rails 3.1を使用しているときにSassで参照イメージを使用するには


私はこの質問が2年前であることを知っていますが、これはこれを検索したときにGoogleで最初に見つけたページなので、他の人が簡単に参照できるように回答を選択するのは素晴らしいことです。
benrugg 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.