2013-11-22 6 views
20

क्षमा करें अगर यह एक साधारण प्रश्न के लिए एक लंबा निर्माण है, लेकिन मैं अपने विचारों को स्पष्ट करना चाहता था।सार्वजनिक/या ऐप/संपत्तियों में रेल 4 स्थैतिक संपत्ति/

मैंने अब दो परियोजनाओं पर रेल 4 का उपयोग किया है और मैं image_tag('/assets/image.png') का उपयोग कर रहा हूं ताकि संपत्ति पथ सहायक कैसे रेल 4 में काम कर सकें। यह तब तक है जब मैंने परिवर्तनों के बारे में अधिक जानने का फैसला किया और this first change note in sprockets-rails मिला। मैंने यह भी ध्यान दिया है कि ASSET_PUBLIC_DIRECTORIES रेलवे हेल्पर्स में /actionview/lib/action_view/helpers/asset_url_helper.rb#L170 में केवल सार्वजनिक फ़ोल्डरों को इंगित करता है। यह मेरे लिए बहुत स्पष्ट हो गया कि यदि आप स्थिर फाइलों तक पहुंच रहे हैं, तो रेल चाहते हैं कि आप सार्वजनिक फ़ोल्डर का उपयोग करें।

तो अब है कि मैं इस समझ गए होंगे, मैं तो बस समझ में नहीं आता क्यों धार रेल डॉक्स स्पष्ट रूप से इस राज्य:

रेल के पिछले संस्करणों में, सभी परिसंपत्तियों की उपनिर्देशिका में स्थित थे छवियों, जावास्क्रिप्ट और स्टाइलशीट जैसे सार्वजनिक। संपत्ति पाइपलाइन के साथ, इन संपत्तियों के लिए पसंदीदा स्थान अब ऐप/संपत्ति निर्देशिका है।

image_path अभ्यास में सार्वजनिक/छवियों फ़ोल्डर में एक यूरी उत्पन्न करता है जो पूरी तरह विपरीत है।

और यह सब कुछ करने के लिए मुझे सभी उपलब्ध सहायकों और पचाने वाले बिल्डरों का उपयोग करने की आवश्यकता है, क्योंकि मैं asset_sync के साथ अपनी संपत्ति को एस 3 पर तैनात करना चाहता हूं।

तो मेरा प्रश्न बस है; क्या सही छवियों/गैर-संकलित संपत्तियों को रखने और परिसंपत्ति_पैथ सहायकों का उपयोग करने के लिए जगह है? सभी दस्तावेज और अन्य सभी स्टैक ओवरफ़्लो वार्तालाप ऐप/संपत्ति फ़ोल्डर का उपयोग करने वाले लोगों के बारे में है, लेकिन स्पॉकेट-रेल चाहते हैं कि हम गैर-पचाने वाली संपत्तियों के लिए जनता का उपयोग करें। क्या वेब पर दस्तावेज़ों और जानकारी को केवल एक अपडेट की आवश्यकता है, या अन्य लोग सिर्फ सभी संपत्ति पथ/संपत्ति/के साथ प्रीपेड करने के कारण दे रहे हैं?

अद्यतन: मुझे लगता है कि मुझे वास्तव में एक मुद्दा था जहां मैं अपने विकास सर्वर को पुनरारंभ नहीं कर रहा था और ऐप/संपत्ति/छवियों में छवियां दिखाई नहीं दे रही थीं, इसलिए यह जनता के लिए गिर जाएगी। यह भी ध्यान रखें कि मैं अपने पेपरक्लिप default_url में संपत्ति सहायकों का उपयोग कर रहा था (जिसे मैंने पाया है कि कई स्टैक ओवरफ़्लो उत्तरों में संपत्तियों को इंगित करने के तरीके के रूप में संदर्भित किया गया है, हालांकि पेपरक्लिप में इंटरपोलेटेड विकल्पों के साथ एसेट पथ हेल्पर्स का उपयोग करने से सार्वजनिक रूप से भी गिरावट आती है, क्योंकि uninterpolated संपत्ति नाम स्पष्ट रूप से किसी मौजूदा फ़ाइल के रूप में नहीं मिला दिया जाएगा।

+0

गुगलिंग के माध्यम से इस पर आने वाले किसी भी व्यक्ति के लाभ के लिए, रेल गाइड में संपत्तियों का वर्णन http://guides.rubyonrails.org/asset_pipeline.html पर किया गया है –

उत्तर

30

आप rake assets:precompile उपयोग करते हैं, रेल संपत्ति के सभी अपने app/assets फ़ोल्डर से, public/assets को ले जाता है। इस के रूप में एक सामान्य ब्राउज़र के लिए उपयोग नहीं है अपने app निर्देशिका, लेकिन public तक पहुंच है।

तो, अपने प्रश्न का उत्तर देने के लिए, यहां मेरे विचार हैं। अगर आपकी छवियां आपकी साइट लेआउट के लिए हैं जैसे लोगो या पृष्ठभूमि, तो आपको उन्हें app/assets/images निर्देशिका में संग्रहीत करना चाहिए, हालांकि, अगर छवियां उपयोगकर्ता उत्पन्न होती हैं, जैसे प्रोफ़ाइल छवियां, तो इन्हें public/images जैसे किसी चीज़ में सीधे संग्रहीत किया जाना चाहिए। आदर्श रूप से आप उन्हें एस 3 या सीडीएन में स्टोर करेंगे, लेकिन आप पहले ही ऐसा कर रहे हैं।

एक बोनस के रूप में, Carrierwave, एक रेल छवि अपलोड मणि, एक public/images प्रकार पथ डिफ़ॉल्ट स्टोर के रूप में अपनी छवियों के लिए उपयोग करता है, तो आप उनकी कॉन्फ़िग फ़ाइल में देख सकते हैं:

# Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "images/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

आशा इस मदद करता है!

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