leaflet というライブラリを
vendor/assets/ 以下において
app/assets/application.js から require で呼び出しているのですが
chrome の開発ツールで
application-515d418457adc5a498c8d8ab9bc49944aef2885fab515db513ae693edef64790.js:2 GET http://localhost:3000/assets/images/spritesheet.svg 404 (Not Found)
というエラーが出ます
プリコンパイルされている
application-515d418457adc5a498c8d8ab9bc49944aef2885fab515db513ae693edef64790.js
中を文字列検索しても spritesheet.svg はヒットせず
リポジトリ内の spritesheet.svg という文字列で検索しても CSS しかヒットしません
CSS 内ではすべて url('images/spritesheet.png'); という形式でヒットします
JSから参照エラーが出る理由がわからなくて困っています
Production 環境でしか発生しないためミニマイズされたソースを読み解くのも大変で
ミニマイズされているソースのどの箇所が画像を参照しているか調べる方法はないでしょうか
追記:
vendor/assets/leaflet/ 以下に leaflet 関連の JS CSS を配置
MarkerCluster.Default.css leaflet-search.js leaflet-src.esm.js leaflet.draw.css leaflet.markercluster.js MarkerCluster.css leaflet-search.min.css leaflet-src.esm.js.map leaflet.draw.js leaflet.markercluster.js.map easy-button.css leaflet-search.min.js leaflet-src.js leaflet.js easy-button.js leaflet-search.mobile.min.css leaflet-src.js.map leaflet.js.map images leaflet-search.mobile.src.css leaflet.css leaflet.markercluster-src.js leaflet-search.css leaflet-search.src.css leaflet.draw-src.css leaflet.markercluster-src.js.map
vendor/assets/leaflet/images/ に png svg 等を配置
layers-2x.png layers.png marker-icon-2x.png marker-icon.png marker-shadow.png spritesheet-2x.png spritesheet.png spritesheet.svg
app/assets/javascripts/application.js で
//= require leaflet //= require easy-button //= require leaflet.draw //= require leaflet.markercluster-src
app/assets/stylesheets/application.css で
//= require leaflet //= require leaflet.draw //= require leaflet-search //= require easy-button //= require MarkerCluster.Default //= require MarkerCluster
leaflet のバージョンは最新の 1.3.4
ほかライブラリも 11 月初旬の時点で最新のもの
追記:
Rails4のProduction環境でのAsset Pipelineで躓いたので検証した
根本的な原因はこれと同じ現象な気がします
JS から画像エラーが出る理由は謎のままですが
CSS の url('images/spritesheet.png') が原因であるとすると
assets 内から require してしまうと assets/application.css に統合されて
その中で images/* をよぶので assets/images/* を参照にいってしまう
public/assets/ はデプロイ時に消去されるので前持っておいておくこともできない
プリコンパイルに画像ファイルをまぜてもサフィックスが付いて名前が変わってしまう
なのでそのサイトのように public 直下の絶対パスに書き換えるか
サフィックスのつかないプリコンパイラをいれるしかない?
Rails ガイドが推奨してる
「外部ライブラリは vendor/assets におく」
というのがそもそもよくないんでしょうか…
回答2件
あなたの回答
tips
プレビュー