Rails 4のimage-path、image-url、asset-urlがSCSSファイルで機能しなくなりました


99

image-urlRails 4では他のものとは別のものを使用することになっていますか?それらは意味をなさないように見える異なる値を返します。私が持っていlogo.png/app/assets/images/logo.png、私が次のことをすると、これが私が得るものです:

image-url("logo.png") -> url("/images/logo.png") #obviously doesn't work
image-path("logo.png") -> "/images/logo.png"
asset-url("logo.png") -> url("/logo.png")

もちろん、少なくとも/assets前部が必要なので、これらはどれも機能しません。

更新:実際、気づいたのですが、Rails 4で画像にアクセスするにはどうすればよいですか?に画像があり/app/assets/images/logo.pngます。しかし、次のいずれかのURLにアクセスしても、画像が表示されません。

http://localhost:3000/assets/logo.png
http://localhost:3000/assets/images/logo.png
http://localhost:3000/logo.png
http://localhost:3000/images/logo.png

更新2:私が表示できる唯一の方法logo.pngは、それを/app/assets/stylesheetsディレクトリに移動してからプルアップすることです。

http://localhost:3000/assets/logo.png

これを試してください:asset_path("logo.png", image)
Marcelo De Polli 2013年

@depa-"/logo.png"に変換されるだけで、画像が表示されません。
に。

3
そのヘルパーを.cssファイル内またはファイル内で使用してい.css.scssますか?
Marcelo De Polli 2013年

@depa-ヘルパーを使用しません。私は、これはただのフォルダ私のイメージのために働いていない資産の大きな問題だと思う
で。

1
@depa-ああ、私はあなたが尋ねていることを理解しています。それは.css.scssファイルの中にあります
at。

回答:


113

私自身、この問題を抱えていました。うまくいけば役立つ3つのポイント:

  • あなたの中に画像を配置する場合app/assets/images、ディレクトリ、あなたはパスに接頭辞なしで直接画像を呼び出すことができるはずです。すなわち。image_url('logo.png')
  • アセットを使用する場所に応じて、アセットはメソッドに依存します。background-image:プロパティとして使用している場合、コード行はになりますbackground-image: image-url('logo.png')。これはlessおよびsassスタイルシートの両方で機能します。ビューでインラインで使用している場合は、組み込みのimage_tagヘルパーをレールで使用して画像を出力する必要があります。もう一度、接頭辞なし<%= image_tag 'logo.png' %>
  • 最後に、アセットをプリコンパイルしている場合は、実行rake assets:precompileしてアセットを生成するかrake assets:precompile RAILS_ENV=production、本番用に実行します。それ以外の場合は、ページをロードするときに本番環境にフィンガープリントされたアセットがありません。

また、bundle execバンドル3を実行している場合は、ポイント3のコマンドにプレフィックスを付ける必要があります。


1
もう1つのポイントは、ドキュメントguides.rubyonrails.org/asset_pipeline.htmlを読むことです。また、画像が読み込まれている場合は、ブラウザーのWeb開発者デバッグで確認できますか?
H.Rabiee 2013年

3
これが答えの書き方です。各シナリオ。「what ifs」を予測すると、ゆるい終わりはありません。「戦闘を見た」(本当に問題を解決した)人の印。
ahnbizcad 2014年

私はいくつかの場面でRAILS_ENV = productionが欠落していることにかまれています。
Sixty4Bit

62

最初の定式化image_url('logo.png')は正しいです。画像が見つかった場合は、パス/assets/logo.png(および本番環境でのハッシュ)が生成されます。ただし、名前を付けた画像がRailsで見つからない場合は、にフォールバックし/images/logo.pngます。

次の質問は、Railsがイメージを見つけられないのはなぜですか?app / assets / images / logo.pngに配置すると、にアクセスしてアクセスできるはずhttp://localhost:3000/assets/logo.pngです。

動作するのにCSSが更新されない場合は、キャッシュをクリアする必要があるかもしれません。tmp/cache/assetsプロジェクトディレクトリから削除し、サーバー(webrickなど)を再起動します。

それが失敗した場合は、background-image: url(logo.png);それを使用して、CSSが同じ相対パス(この場合は/ assets)を持つファイルを検索するようにすることもできます。


2
これにジャンプするために、私は画像パスで一重引用符の代わりに二重引用符を使用することに苦しめられました。css / scssファイルのアセットヘルパーで一重引用符をよく使用します。
d_ethier 2014年

「未定義のローカル変数またはメソッド「イメージ」」を取得しています
Muhammad Umer

単語画像の前に誤ってスペースを入れてしまった可能性はありますか?
Nick Urban、

10

私は、asset_urlヘルパーを使用してその問題を解決することを知りました。

asset_url("backgrounds/pattern.png", image)

undefined local variable or method 'image'エラーが発生しました。
ペンギン

たぶん何かがレールで変更されました、この答えは古いです!あなたが試すことができますasset_path("<your_path>", type: :image)
Leftis

8

同様の問題があり、インラインCSSで背景画像を追加しようとしました。アセットの同期方法により、画像フォルダを指定する必要はありません。

これは私のために働きました:

background-image: url('/assets/image.jpg');

おかげで、私はやっていたassets/img.jpg../assets/img.jpg、明らかにどのディレクトリでも動作しません。/assets/img.jpgします。TY
ElliotM 2017年

5

Rails 4.0.0はimage-url、cssファイルと同じディレクトリ構造で定義されたイメージを探します。

たとえば、CSSがの場合assets/stylesheets/main.css.scss、にimage-url('logo.png')なりurl(/assets/logo.png)ます。

cssファイルをに移動するとassets/stylesheets/cpanel/main.css.scss、にimage-url('logo.png')なり/assets/cpanel/logo.pngます。

assets / imagesディレクトリの直下でイメージを使用したい場合は、 asset-url('logo.png')


5

スタイルシートの場合:url(asset_path( 'image.jpg'))


3
何の主な違いだurl(asset_path('image.jpg')url('image.jpg')image-url('image.jpg')?私は働いているRailsの5.0.0.1url()で罰金を作品SCSSのファイルとでhtml.erbの私が使用したファイルasset_path()、私は行くための正しい方法を知りたいので。前もって感謝します。
alexventuraio 2017年

asset_path画像ファイルにダイジェスト付録を追加します。実際の運用用であり、デプロイするたびにダイジェストの付録が変更され、ユーザーのブラウザが新しいバージョンのイメージをダウンロードします。
Alex Kojin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.