6

पर होस्ट किए गए रेल ऐप से फ़ाइलें अपलोड करने की समस्याएं मेरे पास एक रेल 3 ऐप है जिसे मैं स्थानीय रूप से विकसित कर रहा हूं और उत्पादन के लिए अमेज़ॅन के लोचदार बीनस्टॉक पर तैनाती कर रहा हूं। मेरे ऐप में कई जगहें हैं जहां छवियों को HTML रूपों के माध्यम से अपलोड किया जा सकता है। अपलोड करने के बाद, मैं स्टोरेज के लिए फ़ाइलों को S3 पर भेज रहा हूं। स्थानीय स्तर पर विकास करते समय मुझे इस वर्कफ़्लो में कोई परेशानी नहीं है, लेकिन उत्पादन में, मुझे अपलोड के दौरान 500 आंतरिक सर्वर त्रुटि प्रतिक्रिया मिल रही है (मुझे यकीन है कि यह एस 3 के साथ किसी भी संचार से पहले है)।एलस्टिक बीनस्टॉक

मैंने अपने ईसी 2 इंस्टेंस में ssh'ed को /var/app/support/logs/passenger.log में त्रुटि का निशान पाया। अपलोड के दौरान जेनरेट की गई रेखा यहां दी गई है।

2013/03/30 00:58:52 [आलोचक] 1723 # 0: * 1 9 6227 खुला() "/tmp/passenger-standalone.1645/client_body_temp/0000000014" असफल रहा (2: ऐसी कोई फ़ाइल या निर्देशिका नहीं) , क्लाइंट: ip_address, server: _, अनुरोध: "POST/admin/users/1 HTTP/1.1", होस्ट: "www.my_domain.com", संदर्भकर्ता: "https://www.my_domain.com/admin/users/1/edit"

क्या किसी के पास ज्ञान का कोई शब्द है क्यों मैं अपने रेल से लोचदार बीनस्टॉक में एक फाइल अपलोड करने में सक्षम नहीं हूं?

आपकी मदद के लिए अग्रिम धन्यवाद!

+0

से प्रतिरक्षा हो सकता है। मुझे स्थानीय रूप से स्थापित बंडल करने की आवश्यकता थी। उसकेोकू पर, मुझे इस तरह की चीज़ के लिए एक त्रुटि संदेश प्राप्त करने के लिए उपयोग किया जाता है। – colllin

उत्तर

9

कुछ शोध के बाद, मुझे विश्वास है कि समस्या यह है कि एक दैनिक cronjob (/etc/cron.daily/tmpwatch) यात्री-स्टैंडअलोन को हटा रहा है। * निर्देशिका जो फ़ाइल अपलोड के लिए महत्वपूर्ण है।

मैं ऐप सर्वर को पुनरारंभ करके फिर से अपलोड करने में सक्षम था। अधिक दीर्घकालिक फिक्स के लिए, मैंने पैटर्न '/ tmp/यात्री *' को बाहर करने के लिए tmpwatch स्क्रिप्ट को अपडेट किया (नीचे देखें)।

#! /bin/sh 
flags=-umc 
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \ 
     -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \ 
     -X '/tmp/hsperfdata_*' -X '/tmp/passenger*' 10d /tmp 
/usr/sbin/tmpwatch "$flags" 30d /var/tmp 
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do 
    if [ -d "$d" ]; then 
     /usr/sbin/tmpwatch "$flags" -f 30d "$d" 
    fi 
done 

क्या कोई अन्य समाधान है जो इस मुद्दे के लिए किसी और को मिला है? मैं एक sys व्यवस्थापक लड़का नहीं हूं (जो एक बड़ा कारण है कि मैंने लोचदार बीनस्टॉक का उपयोग करना चुना), इसलिए यदि संभव हो तो मैं ईसी 2 इंस्टेंस के साथ हैक करना पसंद नहीं करूंगा - खासकर जब मेरे ऐप स्केल और अधिक उदाहरण पैदा होते हैं।

+3

मैंने अपना कोड लिया है और इसे अपने ऐप में '.ebextensions/server-update.config' में जोड़ा है जैसे http://pastie.org/8463846 इसलिए नए उदाहरण इसे भी प्राप्त करते हैं –

0

क्या आपने इसके बजाय एस 3 में सीधे अपलोड करने वाली छवियों पर विचार किया है? एलैस्टिक बीनस्टॉक में सर्वर पर अपलोड की चीज की भावना के खिलाफ जाने के लिए फ़ाइल (उदाहरण को गायब होने पर फ़ाइल हटा दी जा सकती है, अगला अनुरोध एक अलग उदाहरण से प्राप्त किया जा सकता है)। मैं एक sys-admin लड़का नहीं हूं और मैं उसी कारण से लोचदार बीनस्टॉक का उपयोग कर रहा हूं।

असल में मैं यह कहने की कोशिश कर रहा हूं कि सीधे एस 3 में अपलोड करने के लिए आप अपने सर्वर की सेवा कर सकते हैं, डेटा को आधारित करने वाले आपके डेटाबेस और आपकी फ़ाइल स्टोर आपको फाइलों को स्टोर कर सकते हैं। तो उम्मीद है कि आप मेरे लिए यह एक भयानक रूकी गलती थी :)

+1

रेल के किसी भी होने से पहले ऐसा होता है कार्रवाई। स्पष्ट रूप से यात्री रेल को कॉल करने से पहले इस tmp dir में अपलोड की गई फ़ाइलों को सहेजता है। उपरोक्त टिप्पणी के कारण –

+0

डाउनवोट। यात्री अपलोड की गई फ़ाइल के लिए एक अस्थायी निर्देशिका आवंटित करता है। यह सवाल का जवाब नहीं देता है। – joslinm

+0

फ़ाइल को आपके वेब सर्वर * पर बिल्कुल नहीं जाना है *, आप एक फॉर्म बना सकते हैं जो फ़ाइल * सीधे * s3 को अपलोड करता है। इसका मतलब है कि आपके सर्वर के पास कम करना है और आप लोड बैलेंसर आदि के माध्यम से फ़ाइल को पास नहीं कर रहे हैं। – Will

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