छवियों को सहेजने के लिए रेल मार्ग पर एक रूबी क्या है?


9

मैं iOS पर विकसित होता हूं , और मैं एक PHP बैकएंड से रूबी ऑन रेल्स पर स्विच कर रहा हूं । इंटरचेंज फॉर्मेट JSON है

'रेल में छवियों को बचाने' के लिए एक त्वरित Google खोज में लगभग हर परिणाम होता है जो छवि डेटा को डेटाबेस के रूप में सहेजने की बात करता है। मुझसे गलती हो सकती है, लेकिन मैं इस धारणा के तहत हूं कि डेटाबेस में छवि डेटा को सहेजना समय और स्थान की भारी बर्बादी है (जैसा कि फ़ाइल स्थान के लिंक को सहेजने का विरोध किया गया है ('/img/subcat/4656.png') ।

PHP में, डेटा प्राप्त करना, फ़ाइल नाम बनाना, उस फ़ाइल को डिस्क पर सहेजना और डिस्क पर छवि के स्थान के साथ डेटाबेस को अपडेट करना सुंदर मानक है। क्या यह रूबी ऑन रेल्स के लिए समान है, या कुछ अंतर्निहित ActiveRecord छवि कार्यक्षमता है जिसके बारे में मुझे जानकारी नहीं है?


1
मैंने पेपरक्लिप पर ठोकर खाई है , जो मुझे लगता है कि मुझे बहुत करीब लगता है। अभी भी अनुभवी रेल लोक से सलाह की सराहना करेंगे कि कैसे इष्टतम गति से हजारों छवियों की सेवा और प्राप्त करने के लिए।
उपयोगकर्ता

1
आपको पता है कि छवि सिर्फ db या डिस्क पर उतनी ही जगह लेगी, है ना? आंत की भावना से, मैं कहूंगा कि रेल डेटाबेस पर स्टोर संग्रहीत करता है क्योंकि यह कैशिंग को संभालने के लिए अपाचे पर निर्भर नहीं है जितना कि PHP। हालांकि यह पूरी तरह से गलत हो सकता है।
फ्लोरियन मार्गाइन सेप

2
हाँ, मुझे नहीं लगता कि इमेज डेटा को स्टोरेज लोकेशन में हेरफेर किया जाएगा। रेल अलग-अलग हो सकती है, लेकिन कुछ भरोसेमंद एसओ सदस्य डेटाबेस में फ़ाइल पथ की ओर झुक रहे हैं। इसके अलावा, मुझे लगता है कि यह पारंपरिक ज्ञान है कि डेटाबेस को स्केल करना मुश्किल है- इसलिए डेटाबेस में छवि डेटा के टन को स्टोर करना निश्चित रूप से आसान नहीं होगा।
उपयोगकर्ता

जवाबों:


4

मैंने जो कुछ अतीत में किया है वह तेजी से वितरण के लिए Amazon S3 और CloudFront CDN के साथ PaperClip का उपयोग करना है । पेपरक्लिप एस 3 स्टोरेज को बॉक्स से बहुत अच्छी तरह से बाहर निकलने का समर्थन करता है: एस 3 स्टोरेज कॉन्फ़िगरेशन विकल्पों के लिए उनके दस्तावेज देखें ।

  1. अपने S3 बाल्टी के लिए छवि अनुरोध अग्रेषित करने के लिए CloudFront वितरण सेट करें और रूबी एप्लिकेशन पर अपनी रूबी के लिए स्थिर संपत्ति के लिए अन्य अनुरोध (वैकल्पिक रूप से, आप उन S3 को भी अपलोड कर सकते हैं, लेकिन यह इस प्रश्न के दायरे से बाहर है)।
  2. अपने CloudFront वितरण को इंगित करने के लिए आपके द्वारा नियंत्रित डोमेन (जैसे कि आस्तियों .example.com) को CNAME करें।
  3. पेपरक्लिप कॉन्फ़िगरेशन में, सेट करें s3_host_alias: assets.example.com। यह आपके CloudFront वितरण होस्ट का उपयोग करने के लिए सहेजे गए छवि संसाधनों के लिए उत्पन्न URL का कारण होगा ।
  4. रेल विन्यास पर अपनी रूबी में, आप तब कर सकते हैं config.action_controller.asset_host = http://assets.example.com। रेलिंग एसेट यूआरएल पर रूबी फिर कैशिंग / तेज वितरण के लिए आपके क्लाउडफ्रंट वितरण का उपयोग करेगी।

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

(एक संभव उन्नत कदम है कि आवश्यक या अपने मामले के लिए उपयोगी नहीं हो सकता है के रूप में, आप भी कई CNAME उपलब्ध अपने CloudFront वितरण के लिए, इस तरह के रूप में स्थापित कर सकते हैं assets0.example.comऔर assets1.example.comदोनों पेपरक्लिप। s3_host_aliasऔर action_controller.asset_hostतो lambdas कि आप निर्धारणात्मक (के आधार पर करने की अनुमति देगा ले जा सकते हैं परिसंपत्ति) अलग-अलग मेजबानों का उपयोग करने वाले URL उत्पन्न करते हैं, बेहतर समानांतरकरण के लिए यदि आप एक ही पृष्ठ पर उनमें से एक गुच्छा डाउनलोड कर रहे हैं, क्योंकि ब्राउज़र एक ही मेजबान के अधिकतम युगपत कनेक्शन को सीमित कर देंगे।)


3

मैं कई जवाहरात की कोशिश की है, लेकिन अब मैं उपयोग कर रहा हूँ FineUploader साथ साथ paperclip

ललितउप लोडर आपके लिए बहुत सारे जीयूआई को संभालता है, उदाहरण के लिए अपलोड प्रगति, ड्रैग-एंड-ड्रॉप और कई फाइल अपलोड, और इसी तरह। मैं पेपरक्लिप का उपयोग कर रहा हूं क्योंकि मैं छवियों को S3 के बजाय अपने सर्वर पर संग्रहीत करना चाहता हूं।

आम तौर पर हम जो करते हैं वह स्क्रैच से सामान को फिर से बनाने के बजाय एक स्थिर आउट-ऑफ-द-बॉक्स कॉन्फ़िगर करने योग्य समाधान की तलाश में है। पेपरक्लिप के साथ मैं छवियों को संग्रहीत करता हूं और एक स्टेटमैचाइन के साथ मैं छवियों पर रूपांतरण करता हूं और उन्हें फिल्मनाम के आधार पर एक श्रेणी में डाल देता हूं। मेरे पास एक ही सवाल था, और यह मेरा सबसे अच्छा काम करने वाला समाधान था, इसलिए मैं इसे साझा करता हूं।


2
यह काम करने के लिए एक बाहरी पैकेज के लिए सिर्फ एक सिफारिश है; ओपी यह पूछ रहा था कि रेल पर रूबी देवों को आम तौर पर छवियों को संग्रहीत करने के लिए क्या करना है, न कि सिफारिश के लिए। हालांकि यह एक उदाहरण है कि एक पैकेज यह कैसे करता है, यह वास्तव में सवाल का जवाब नहीं देता है।
मार्टिज़न पीटर

सच। आम तौर पर हम जो करते हैं वह स्क्रैच से सामान को फिर से बनाने के बजाय एक स्थिर आउट-ऑफ-द-बॉक्स कॉन्फ़िगर करने योग्य समाधान की तलाश में है। पेपरक्लिप के साथ मैं छवियों को संग्रहीत करता हूं और एक स्टेटमैचाइन के साथ मैं छवियों पर रूपांतरण करता हूं और उन्हें फिल्मनाम के आधार पर एक श्रेणी में डाल देता हूं। मेरे पास वही प्रश्न था जो ओपी के पास था, और यह मेरा सबसे अच्छा काम करने वाला समाधान था, इसीलिए मैं इसे साझा करता हूं ..
JeroenKnoops
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.