रेलगाड़ी 3.1 और छवि संपत्ति


156

मैंने अपनी सभी थीम अपने व्यवस्थापक विषय के लिए व्यवस्थापक फ़ोल्डर में एक फ़ोल्डर में रखी है, जिसे व्यवस्थापक कहा जाता है। फिर मैं इसे सामान्य की तरह लिंक करता हूं।

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

FYI करें। बस परीक्षण के लिए मैं अभी संपत्ति_पथ टैग का उपयोग नहीं कर रहा हूं क्योंकि मैंने अपनी संपत्ति संकलित नहीं की है।

जब तक मैंने एक छवि को अपडेट करने का फैसला नहीं किया, तब तक सब ठीक है। मैंने कुछ रंगों को बदल दिया लेकिन फिर से लोड करने पर नई स्टाइल की छवि दिखाई नहीं दे रही है। अगर मैं छवि को सीधे ब्राउज़र में देखता हूं तो यह अभी भी पुरानी छवि दिखा रहा है। एक कदम आगे बढ़ते हुए मैंने एडमिन इमेज फोल्डर को नष्ट कर दिया। लेकिन इसने कुछ भी नहीं तोड़ा है सभी चित्र अभी भी प्रदर्शित किए जा रहे हैं। और हाँ मैंने अपना कैश साफ़ कर दिया है और कई ब्राउज़रों पर कोशिश की है।

क्या किसी प्रकार की छवि कैशिंग चल रही है? यह पन्नों की सेवा के लिए केवल स्थानीय विकास है।

यहां तक ​​कि पूरे चित्र फ़ोल्डर को नष्ट करने के बाद भी छवियों को सेवा दी जा रही है।

क्या मैं कुछ भूल रहा हूँ?


2
संपत्ति पाइपलाइन का उपयोग 3.1 के साथ ऐसा नहीं है। आप कमांड रेक एसेट्स का उपयोग करेंगे: प्रीकम्पाइल जो उन फाइलों को कंप्रेस करके उन्हें सार्वजनिक फाइल में ले जाएगा
ली

2
अच्छी तरह से उन्हें सार्वजनिक फ़ोल्डर में ले जाना काम कर गया, सभी अजीब थे क्योंकि उन्होंने संपत्ति फ़ोल्डर से ठीक काम किया था। शायद 3.1 पर अधिक डॉक्स के लिए इंतजार करना होगा।
ली

3
मैं तुम्हारी हताशा को समझता हूं। जाहिरा तौर पर जारी उम्मीदवारों बहुत अच्छी तरह से प्रलेखित नहीं मिलता है।
tybro0103

1
उन्हें संपत्ति में छोड़ दें, बस एक फ़ोल्डर पथ शामिल न करें। नीचे मेरा जवाब देखें।
एंड्रयू

जवाबों:


226

3.1 में आप केवल पथ के 'छवियों' भाग से छुटकारा पाते हैं। तो एक छवि जो /assets/images/example.pngवास्तव में रहती है वह इस url के लिए अनुरोध में सुलभ होगी -/assets/example.png

क्योंकि assets/imagesफ़ोल्डर एक नए 3.1 ऐप के साथ उत्पन्न होता है, यह वह कन्वेंशन है जिसे वे संभवतः आपका अनुसरण करना चाहते हैं। मुझे लगता है कि image_tagइसके लिए यह कहां लगेगा, लेकिन मैंने अभी तक इसका परीक्षण नहीं किया है।

इसके अलावा, रेल्सकॉन्फ़ कीनोट के दौरान, मुझे D2h यह याद है कि public folderइसमें अब ज्यादा नहीं होना चाहिए, ज्यादातर सिर्फ त्रुटि पृष्ठ और एक फ़ेविकॉन।


हाँ, मैंने इस आवंटन के साथ खेला है और उनके पास इसे आसान बनाने के लिए कुछ रास्ता है। हां, उन्हें मेरे एसेट फोल्डर के काम में लाना लेकिन फिर आप एसेट्स टैग का उपयोग कर सकते हैं। इसलिए मैं यह देखने के लिए इंतजार कर रहा हूं कि अधिक जानकारी क्या है।
ली

1
धन्यवाद, मेरी बहुत मदद की, भी। यह उस तरह का सामान है जो मुझे पागल बना रहा है क्योंकि अन्य वेब विकास ढांचे से आने वाली रेल को सीखने की कोशिश कर रहा है।
jn29098

6
और क्या होगा यदि दो अलग-अलग फ़ोल्डरों में एक ही फ़ाइल नाम हो?
हादी इलासार

6
क्या यह डीएच 2 नहीं होना चाहिए?
टियागो फ्रेंको

1
निश्चित नहीं कि उन्हें पहले से काम करने वाली चीज़ को क्यों बदलना पड़ा।
टेस्टीब्रोनीज़

98

आप से अपने सीएसएस फ़ाइल के विस्तार को बदलने के लिए चाहता हूँ .css.scssकरने के लिए .css.scss.erbऔर कार्य करें:

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

परिवर्तनों को देखने के लिए आपको "हार्ड रिफ्रेश" करने की आवश्यकता हो सकती है। OSD ब्राउज़रों पर 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 अब पूर्व
मार्टिन Wawrusch

1
मैंने sass-rails हेल्पर्स (image_url और image-url) को एक css.scss फ़ाइल में आज़माया, लेकिन इसकी व्याख्या नहीं हुई। कोई सुराग ?
invaino

2
उत्पन्न scss फाइलों को नाम दिया गया है। डिफ़ॉल्ट रूप से .scsss, बिस्तर का कोई भी
चीरना

2
किसी कारण से छवि-यूआरएल मेरे लिए काम नहीं करता था, लेकिन संपत्ति-यूआरएल ('myimage.png', छवि) ने पूरी तरह से काम किया। (रेलगाड़ी 3.1)
एल्द

1
मामले में 3.0 से किसी को भी उन्नयन सोच रहा है, तो आप सिर्फ से अपने स्टाइलशीट नाम बदल सकते हैं .cssकरने के लिए .css.erb(के बाद आप उन्हें में स्थानांतरित कर दिया है app/assetsसास बिना ERB प्रसंस्करण प्राप्त करने के लिए।
विलियम Denniss

22

इसके लायक क्या है, जब मैंने ऐसा किया तो मैंने पाया कि किसी भी फ़ोल्डर को सीएसएस फ़ाइल में पथ में शामिल नहीं किया जाना चाहिए। उदाहरण के लिए यदि मेरे पास है app/assets/images/example.png, और मैंने इसे अपनी सीएसएस फ़ाइल में डाल दिया है ...

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

... तो किसी तरह यह जादुई काम करता है। मुझे यह पता चला कि इस rake assets:precompileकार्य को चलाने से , जो आपके सभी लोड पथों में से हर चीज को बेकार कर देता है और उसे कबाड़ ड्रॉ फ़ोल्डर में डाल देता है:public/assets :। यह विडंबना है, IMO ...

किसी भी मामले में इसका मतलब है कि आपको किसी भी फ़ोल्डर पथ को रखने की आवश्यकता नहीं है, आपकी संपत्ति फ़ोल्डर में सब कुछ एक विशाल निर्देशिका में रहने वाले सभी समाप्त हो जाएगा। यह सिस्टम फ़ाइल नाम का विरोध कैसे करता है विरोधाभास स्पष्ट नहीं है, आपको इसके बारे में सावधान रहने की आवश्यकता हो सकती है।

निराशा की तरह वहाँ एक बड़ा परिवर्तन के लिए वहाँ बेहतर डॉक्स नहीं हैं।


3
जब नामकरण संघर्ष होते हैं, तो पहले पथ जो config.assets.paths सरणी में दिखाई देता है वह फ़ाइल है जिसे चुना गया है। यह asset_path()सहायक का उपयोग करके और निर्देशिका को निर्दिष्ट करके बचा जा सकता है ।
जोसेफ रेवेनवॉल्फ

6
यह "जादुई रूप से काम करता है" क्योंकि सीएसएस फ़ाइल और चित्र एक ही स्थान पर हैं। CSS फ़ाइल संदर्भ css फ़ाइल के स्थान के सापेक्ष हैं।
बिल लीपर

परिसंपत्ति पाइपलाइन थोड़ा काला बॉक्स हो सकता है, विशेष रूप से फ्रंट-एंड डेवलपर्स के लिए, लेकिन यह बहुत सारी शानदार सुविधाएँ प्रदान करता है जैसे कि फ़ाइल पथ और स्वचालित कैश बस्ट के बारे में चिंता न करना।
मील्स

16

रेल 4 में अब आप एक css और sass हेल्पर इमेज-url का उपयोग कर सकते हैं:

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

यदि आपकी पृष्ठभूमि छवियां नहीं दिख रही हैं, तो यह देखने पर विचार करें कि आप उन्हें अपने स्टाइलशीट में कैसे संदर्भित कर रहे हैं।


1
यह सही है (रेल के लिए 4)। इस उत्तर को वोट दें!
अहानिबेकाड

यूआरएल कीवर्ड के साथ-साथ स्ट्रिंग में डालकर 'आपकी मदद करता है'। इसका मतलब है कि आप जैसी चीजें कर सकते हैं। div.logo {background: image-url("logo.png") no-repeat center;}
एंटनी डेनियर

10

जब CSS या IMG टैग में छवियों को संदर्भित करते हैं, तो image-name.jpg का उपयोग करें

जबकि छवि वास्तव में स्थित है ./assets/images/image-name.jpg


मुझे लगता है कि यह गलत है जब सीएसएस की बात आती है - रेल का उपयोग 3.1.0.rc4 जब मैं इसका उपयोग background: url('sort_asc_disabled.png')करता हूं तो यह फ़ाइल ऐप / परिसंपत्तियों / छवियों / Sort_asc_disabled.png के लिए काम करता है।
अद्भुत

2

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

इस रेलकास्ट (संपत्ति पाइपलाइन पर रेल ट्यूटोरियल वीडियो) के रूप में अच्छी तरह से संपत्ति पाइपलाइन में रास्तों को समझाने में बहुत मदद करता है। मुझे यह बहुत उपयोगी लगा, और वास्तव में इसे कुछ बार देखा।

मैंने जो हल चुना, वह है @ मैकीली के ऊपर, लेकिन इस रेलकास्ट ने मुझे यह समझने में मदद की कि यह क्यों काम करता है। आशा करता हूँ की ये काम करेगा!


0

रेल में परिसंपत्ति पाइपलाइन इस सटीक चीज़ के लिए एक विधि प्रदान करता है।

आप बस अपने css या scss फ़ाइल में image_path ('छवि फ़ाइल नाम') जोड़ते हैं और रेल सब कुछ संभाल लेती है। उदाहरण के लिए:

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

(ध्यान दें कि यह एक .erb दृश्य की तरह ही काम करता है, और आप पथ में "/ संपत्ति" या "/ संपत्ति / चित्र" का उपयोग नहीं करते हैं)

रेल अन्य सहायक विधियों की भी पेशकश करती है, और यहाँ एक और जवाब है: मैं रेल में संदर्भ चित्र का उपयोग कैसे करूँ?


मुझे पता है कि यह प्रश्न एक दो साल पुराना है, लेकिन यह पहला पृष्ठ था जिसे मैंने Google पर खोजा था जब इसे खोजा गया था, इसलिए उत्तर का चयन करना बहुत बढ़िया होगा ताकि अन्य इसे आसानी से संदर्भित कर सकें!
बेनरग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.