2009-10-26 21 views
9

मुझे बड़ी गतिशील रूप से जेनरेट की गई संपत्तियों और Heroku होस्ट करने के बारे में एक प्रश्न है।हेरोोकू: स्थानीय फाइल सिस्टम के बिना बड़ी गतिशील रूप से जेनरेट की गई संपत्तियों की सेवा

मेरा ऐप इसके अंतर्निहित डेटा के सबसेट का थोक डाउनलोड प्रदान करेगा, जिसमें प्रत्येक 24 घंटे में एक बड़ी फ़ाइल (> 100 एमबी) उत्पन्न होगी। अगर मैं किसी सर्वर पर चल रहा था, तो मैं सिर्फ फाइल को सार्वजनिक निर्देशिका में लिखूंगा।

लेकिन जैसा कि मैं इसे समझता हूं, यह हेरोोकू के साथ संभव नहीं है।/Tmp निर्देशिका को लिखा जा सकता है, लेकिन फाइलों की गारंटीकृत जीवनकाल seems to be defined एक अनुरोध-प्रतिक्रिया चक्र के संदर्भ में, पृष्ठभूमि की पृष्ठभूमि नहीं है।

मैं डाउनलोड फ़ाइल होस्ट करने के लिए S3 का उपयोग करना चाहता हूं। S3 gem स्ट्रीमिंग अपलोड का समर्थन करता है, लेकिन केवल उन फ़ाइलों के लिए जो स्थानीय फाइल सिस्टम पर पहले से मौजूद हैं। ऐसा लगता है कि सामग्री के आकार को सामने की ओर जाना आवश्यक है, जो मेरे मामले में संभव नहीं होगा।

तो यह कैच -22 जैसा दिखता है। मैं S3 पर अपलोड करते समय स्मृति में एक विशाल स्ट्रिंग बनाने से बचने की कोशिश कर रहा हूं, लेकिन S3 केवल स्थानीय फाइल सिस्टम पर मौजूद फ़ाइलों के लिए स्ट्रीमिंग अपलोड का समर्थन करता है।

एक रेल ऐप को देखते हुए जिसमें मैं स्थानीय फाइल सिस्टम में नहीं लिख सकता, मैं स्मृति में बड़ी स्ट्रिंग के बिना रोज़ाना उत्पन्न होने वाली एक बड़ी फ़ाइल कैसे सेवा करूं?

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है। मैंने अभी तक इसका सामना नहीं किया है, लेकिन मुझे लगता है कि मैं अपने देरी_job कार्यकर्ता पर/tmp फ़ाइल सिस्टम को लिख सकता हूं और यह फ़ाइल को S3 पर अपलोड करने के लिए काफी देर तक टिकेगा। लोगों को सुझाव देने के लिए दिलचस्प है! –

उत्तर

10

${RAILS_ROOT}/tmp (नहीं/tmp, यह आपके एप्लिकेशन की निर्देशिका में है) अपनी प्रक्रिया की अवधि के लिए रहता है। यदि आप पृष्ठभूमि डीजे चला रहे हैं, तो टीएमपी में फाइलें उस प्रक्रिया की अवधि के लिए चली रहेंगी।

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

- अन्य हेरोोक कर्मचारी

+0

@teich, यह समझ में आता है - धन्यवाद! –

3

रिच,

आप तो S3 के लिए फ़ाइल स्ट्रीमिंग ./tmp करने के लिए फ़ाइल लेखन की कोशिश की है?

-Blake Mizerany (Heroku)

+0

@ ब्लेक, मैंने कोशिश नहीं की है क्योंकि/tmp निर्देशिका (उपरोक्त लिंक) पर हेरोकू दस्तावेज कहता है (जो मैं बता सकता हूं) कि निर्देशिका की सामग्री एक अनुरोध की अवधि के लिए जीवित रहेगी। मैं जो करूँगा वह एक पृष्ठभूमि नौकरी के संदर्भ में होगा, जो मुसीबत मांगने जैसा लगता है। यदि मैं गलत हूं, तो महान - इससे समस्या हल हो जाएगी। –