2013-07-21 4 views
9

मुझे एक समस्या है जो वास्तव में एक समस्या नहीं होनी चाहिए। कुछ कारणों से मेरे पास ऐप/संपत्ति/छवियों में छवियां पहुंच योग्य नहीं हैं। जब मैं उनसे अनुरोध करता हूं तो मुझे 404 मिलते हैं।रेल 4 और पत्रक: संपत्ति/छवियां नहीं मिलीं?

./log/development.log:Started GET "/assets/images/marker-shadow.png" for 127.0.0.1 at 2013-07-20 22:02:38 -0400 
./log/development.log:ActionController::RoutingError (No route matches [GET] "/assets/images/marker-shadow.png"): 

[email protected]:~/projects/myapp$ ls app/assets/images/ 
marker-icon-2x.png marker-icon.png marker-shadow.png 

यह वास्तव में एक ब्राइंडेड आसान फिक्स होना चाहिए ... सर्वर को सबसे अधिक पुनरारंभ करना। मैंने सर्वर को पुनरारंभ किया है, मैंने यह सुनिश्चित करने के लिए फ़ाइल अनुमतियों की जांच की है कि फ़ाइलों पर उनके पास अनुमतियां हैं ... और जब भी मैं अपना पृष्ठ लोड करता हूं तब भी मुझे 404 मिलते हैं।

मुझे यहां क्या याद आ रही है?

का उपयोग करते हुए रेल 4.

उत्तर

17

बस इस सहायक के साथ अपनी छवि को मिलती है:

image_path('marker-shadow.png') 

पथ रेल द्वारा उत्पन्न की छवियों 'फ़ोल्डर के बिना "/assets/marker-shadow.png" है।

asset_path('marker-icon-2x.png') 

एससीएसएस अंदर छवियों के लिए यह हो जाता है::

+2

उह। वह यह था। जब मैंने मानचित्र पर मार्कर बनाया, तो Leaflet.js डिफ़ॉल्ट आइकन का अनुरोध कर रहा था, लेकिन पत्रिका रेल संपत्ति संपत्ति पाइपलाइन सामग्री के बारे में नहीं जानता है। मुझे icon_rl के साथ एक कस्टम आइकन निर्दिष्ट करना था जो image_path सहायक का उपयोग करता है। धन्यवाद! – mikewilliamson

+1

यदि आप छवियों को एक दृश्य में प्रदर्शित करना चाहते हैं, तो आपको image_pag के साथ image_path का उपयोग करना होगा। image_path() केवल छवि फ़ाइल का पथनाम देता है। तो, आप यह करेंगे: image_tag image_path ('your_image.png') –

+0

मुझे अभी भी वही समस्याएं आ रही हैं। यदि आप रेल परियोजना में पुस्तिका को एकीकृत कर रहे हैं, तो क्या हमें उन्हें 'विक्रेता' फ़ोल्डर में नहीं रखा जाना चाहिए? 'विक्रेता' फ़ोल्डर में फ़ाइलों के साथ सब कुछ प्रीकंपाइल करने का सही तरीका क्या है और सभी डिफ़ॉल्ट पुस्तिकाओं में सही पथ पहुंच है? यह मेरे विकास पर्यावरण में काम कर रहा है, लेकिन प्रीकंपाइल के बाद उत्पादन एक ही समस्या का सामना कर रहा है। – richsinn

7

तुम सब app/assets/images/ फ़ोल्डर में आप सीधे पथ के साथ उपयोग कर सकते हैं इस ERB अंदर इसका इस्तेमाल करने के लिए

'/assets/marker-icon-2x.png' 
... 

वहाँ संपत्ति सहायक है

image-path('marker-icon-2x.png') 

क्योंकि फ़ोल्डर्स app/assets/[images||stylesheets||javascripts] मानचित्र जैसे हैं साथ asset pipeline framework

टिप्पणी एक फ़ोल्डर /assets कि सहायक image_tag('marker-icon-2x.png') "जानता" पहले से ही जहां छवि, यहाँ मेरी स्लिम टेम्पलेट से

2

मैं #map तत्व को एक डेटा विशेषता के रूप में यूआरएल जोड़ दिया है:

#map data-marker-url=asset_path('leaflet/marker-icon.png') data-marker-2x-url=asset_path('leaflet/marker-icon-2x.png') data-marker-shadow-url=asset_path('leaflet/marker-shadow.png') 

तो मैं मान जब मार्कर की स्थापना का उपयोग (latitude & longitude भी डेटा गुण हैं, लेकिन मैं छोड़ दिया है कि संक्षिप्तता के लिए)

$map = $('#map') 
L.marker(
    [latitude, longitude], 
    icon: new L.Icon({ 
    iconUrl: $map.data('marker-url'), 
    retinaUrl: $map.data('marker-2x-url'), 
    shadowUrl: $map.data('marker-shadow-url'), 
    iconSize: [25, 41], 
    iconAnchor: [12, 41], 
    popupAnchor: [1, -34], 
    shadowSize: [41, 41] 
    }) 
).addTo(map) 

अंतिम 4 विशेषताएँ छवियों के लिए कुछ मेटा डेटा सेट करती हैं, अन्यथा छवि केंद्र उस स्थान पर सेट किया जाएगा, न कि मार्कर की नोक। ये मान लीफलेट 0.6.4 के लिए डिफ़ॉल्ट हैं।

डेटा विशेषताओं के बजाय आप erb या कुछ के माध्यम से अपना जावास्क्रिप्ट भी भेज सकते हैं, लेकिन मुझे यह बेहतर पसंद है।

2

यदि आप छवियों को एक दृश्य में प्रदर्शित करना चाहते हैं, तो आपको image_tag के साथ छवि_पैथ का उपयोग करना होगा। image_path() केवल छवि फ़ाइल का पथनाम देता है। तो, आप यह करेंगे:

image_tag image_path('your_image.png') 
2

मुझे DropZone.js का उपयोग करके एक ही समस्या थी। W/विशाल ड्रॉपज़ोन फ़ाइल को गड़बड़ करने के बजाय, मैंने अभी 'छवियों' नामक एक फ़ोल्डर बनाया है और वहां मेरी स्प्राइट छवियां रखी हैं। यही वह जगह है जहां ड्रॉपज़ोन उन्हें उम्मीद करता है, और इसलिए मुझे स्प्राइट छवियों के लिए '404' त्रुटि नहीं मिली।

1

मुझे पता चला है कि अगर आपने अभी/ऐप/संपत्ति/छवियों फ़ोल्डर को जोड़ा है, तो जब तक आप अपने ऐप को पुनरारंभ नहीं करेंगे तब तक स्पॉकेट इसे नहीं ढूंढ पाएंगे।

2

ऐसा इसलिए होता है क्योंकि पत्रक छवियों के पथ का अनुमान लगाने का प्रयास करता है। लेकिन अपने प्रारंभकर्ता कोड में you can set the default marker images path, इस तरह:

L.Icon.Default.imagePath = 'path-to-your-leaflet-images-folder'; 
// your other Leaflet code 

तो अपने मामले में यह होगा:

L.Icon.Default.imagePath = '/assets' 

लेकिन इस दृष्टिकोण के साथ एक समस्या है, यह पचा छवियों के साथ काम नहीं करता।

L.marker([45.5, -10.9], {icon: digested_icon}) 

याद करने के लिए .erb एक्सटेंशन जोड़ने के लिए:

digested_icon = L.icon({ 
    iconUrl: "<%= asset_path 'marker-icon.png' %>" 
    iconRetinaUrl: "<%= asset_path 'marker-icon-2x.png' %>" 
    shadowUrl: "<%= asset_path 'marker-shadow.png' %>" 
}) 

तो फिर तुम कभी भी कोई नया मार्कर जोड़ने इस कस्टम आइकन में निर्दिष्ट करना होगा: तो यह रेल सहायकों के साथ एक कस्टम Icon का उपयोग करें और यूआरएल सेट करने के लिए सबसे अच्छा है मदद करने के लिए मददगार के लिए आपकी कॉफी/जेएस फ़ाइल।

संबंधित मुद्दे