2013-09-30 10 views
5

का उपयोग कर एस 3 में फ़ाइल अनुमतियां सेट करने में असमर्थ मैं अब 36 घंटे के लिए इसका समाधान ढूंढने की कोशिश कर रहा हूं, इसलिए उम्मीद है कि मैं कोई प्रश्न डुप्लिकेट नहीं कर रहा हूं या कुछ स्पष्ट नहीं पूछ रहा हूं। मैं एक वेब ऐप बना रहा हूं जिसे एस 3 में संग्रहीत फ़ाइलों में हेरफेर करना है और 'सार्वजनिक-पढ़ने' एसीएल के साथ एस 3 में नए संस्करणों को वापस रखना है। फिर एक अलग पृष्ठ आपको अद्यतन फ़ाइल देखने की अनुमति देता है। ऐप एक अमेज़ॅन ईसी 2 सर्वर पर मौजूद है और एक अमेज़ॅन एस 3 बाल्टी से जुड़ता है।boto और django

मैं ऐसा करने के लिए django, अजवाइन और बोटो का उपयोग कर रहा हूं। मेरे पास एक अजवाइन कार्य स्थापित है जो मेरे विचारों में से कुछ से कुछ जानकारी प्राप्त करता है और प्रसंस्करण करता है और फिर नई फ़ाइल को S3 पर पोस्ट करता है। मैं एस 3 से मूल फ़ाइल प्राप्त करने में सक्षम हूं, इसे सफलतापूर्वक कुशलतापूर्वक उपयोग कर सकता हूं, और इसे S3 पर दोबारा पोस्ट कर सकता हूं। एकमात्र चीज जो काम नहीं कर रही है वह उस फ़ाइल पर अनुमतियों को बदल रही है। इसलिए जब आप देखने वाले पृष्ठ पर जाते हैं, तो सबकुछ काम करता है, मुझे उस फ़ाइल तक पहुंचने का प्रयास करते समय 403 (निषिद्ध) त्रुटि मिलती है।

यदि मैं स्वयं S3 में जाता हूं और सभी को पढ़ने के लिए उस फ़ाइल पर अनुमति बदलता हूं, तो यह सब काम करता है। इससे पहले कि मैं पर जाना है, कोड है कि मैं अपने काम है कि लगभग काम करता है में उपयोग करते हैं:

name = 'filename.blah' 
conn = boto.connect_s3() 
b = conn.get_bucket(settings.AWS_STORAGE_BUCKET_NAME) 
grab_from_S3(name,b) # grab file from S3 
out_name = conv(name) 
send_to_S3(out_name,b) 

जहां कार्यों में देखते हैं:

def grab_from_S3(file,bucket): 
    k = Key(bucket) 
    k.key = file 
    k.get_contents_to_filename(file) 

def send_to_S3(file,bucket): 
    k = Key(bucket) 
    k.key = file 
    k.set_contents_from_filename(file) 
    k.set_acl('public-read') 

और रूपा (नाम) बस कुछ रूपांतरण सामान करता है। इसलिए यह लगभग सभी तरह से काम करता है सिवाय इसके कि फ़ाइल की अनुमतियां 'सार्वजनिक-पढ़ने' नहीं हैं। मुझे लगता है कि सभी एडब्ल्यूएस क्रेडेंशियल्स और बाल्टी नाम को पर्यावरण से ठीक से आयात किया जा रहा है क्योंकि यह एस 3 से फ़ाइलों को धक्का और खींचने में सक्षम है।

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

चीज़ें है कि मैं कोशिश की है:

  1. मैं अनुमतियाँ समारोह में इस तरह के k.set_contents_from_filename(file,policy='public-read') या k.make_public() या b.set_acl('public-read',out_name) लेकिन के रूप में उन में से कोई भी या तो काम के अन्य संस्करणों का उपयोग करने की कोशिश की।
  2. मैंने बाल्टी पर अनुमतियां बदलने के लिए कहा कि सभी को अनुमतियों को बदलने की अनुमति है और यह अभी भी काम नहीं कर रहा है।
  3. लिए मैंने नीचे करने के लिए बाल्टी नीति बदलने की कोशिश की है और यह कोई प्रभाव नहीं बनाया:

    { "Version": "2008-10-17", "Id": "whatever", "Statement": [ { "Sid": "whatever", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "s3:PutObjectAcl", "s3:PutObject"], "Resource": [ "arn:aws:s3:::bucket_name", "arn:aws:s3:::bucket_name/*" ] } ] }

अंत में, मैं वास्तव में उलझन में हूँ क्योंकि मैं यह सब करने के लिए लग सकता है एक ही ईसी 2 उदाहरण पर एक पायथन पर्यावरण से ठीक है लेकिन उस उदाहरण पर चल रहे कोड नहीं। मैंने खोज की है और खोज की है और काम करने वाले किसी भी सुझाव को खोजने में सक्षम नहीं है। जानकारी का एक और संभावित रूप से उपयोगी टुकड़ा (लेकिन यह समस्या के आधार पर अप्रासंगिक हो सकता है) यह है कि यदि मैं ऊपर दिए गए समान आदेशों को देखकर अपने दृश्य में एस 3 से कनेक्ट करने का प्रयास करता हूं तो यह एक त्रुटि देता है:

"कोई हैंडलर प्रमाणीकृत करने के लिए तैयार नहीं था 1 हैंडलर की जांच की गई।['HmacAuthV1 हैंडलर'] अपने क्रेडेंशियल जांचें "

भले ही यह काम करता है जब यह आदेश मेरे कार्य में चलाया जाता है (मुझे लगता है कि यह गलत पहुंच कुंजी या गुप्त पहुंच कुंजी या कुछ था, लेकिन यह सब कुछ के साथ काम करता है)। मुझे लगता है कि मैं बोटो लाइब्रेरी के हिस्सों के पाइथन कोड में सही आयात कर रहा हूं।

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

धन्यवाद अग्रिम एक टन।

+0

वहां बहुत सारे प्रश्न 8 ^) विशेष रूप से, अपनी कुंजी पर एसीएल सेट करने के लिए, करने का प्रयास करें: k.set_contents_from_filename (फ़ाइल, नीति = 'सार्वजनिक-पढ़ा')। यह आपको एक अलग ऑपरेशन की बजाय फ़ाइल लिखने पर एसीएल सेट करने की अनुमति देता है। – garnaat

+0

हाय गार्नाट, सुझाव के लिए धन्यवाद। "मैंने जो चीजें मैंने कोशिश की हैं" अनुभाग में, मैंने उल्लेख किया है कि मैंने 'सार्वजनिक-पढ़ने' की कुंजी सेट करने के लिए सभी प्रकारों को करने का प्रयास किया था। जिसने आपको सुझाव दिया वह वह है जिसे मैंने कोशिश की थी। यह निश्चित रूप से एक अच्छा सुझाव है लेकिन अभी भी काम नहीं करता है। जो चीज वास्तव में मुझे भ्रमित करती है वह यह है कि कोई भी प्रकार एक अजगर पर्यावरण से काम करता है। और task.py में कोड से कोई भी काम नहीं करता है। सलाह के लिये धन्यवाद! – barragan

उत्तर

7

मैंने लगभग 4 दिनों के बाद समस्या को हल किया और जवाब पूरी तरह से मेरी नाक के नीचे था। तो किसी और के लिए जो इस पर हो सकता है, मैं अपनी उदासीनता का पर्दाफाश करूंगा।

मैं अजवाइन के लिए बहुत नया हूं। मुझे यह नहीं पता था कि हर बार जब आप अपने अजवाइन कार्यों में बदलाव करते हैं, तो आपके श्रमिकों को बदलाव देखने के लिए उनके लिए पुनरारंभ करना होगा। इससे पहले कभी मेरे लिए कोई समस्या नहीं थी क्योंकि जब भी मैं विकास कर रहा था, मैंने हमेशा श्रमिकों को खुद शुरू किया, लेकिन मैंने हाल ही में अजवाइन के रूप में अजवाइन चलाने के लिए स्विच किया है। तो यह पहला बदलाव था जिसमें मैंने बनाया था जिसमें अजवाइन पूरे समय चल रहा था।

उत्तर यह था कि मुझे केवल डेमॉन को पुनरारंभ करने की आवश्यकता है ताकि यह मेरे आदेशों को देख सके। यह सब अब काम करता है। मैं गया और सेलेरी दस्तावेज़ीकरण में एक लाइन खोजने की कोशिश की या जब आप परिवर्तन करते हैं या कोड आयात किया जाता है तो इसे करने के बारे में याद रखने के बारे में मार्गदर्शिकाएं शुरू करने की कोशिश की जाती है लेकिन कुछ भी स्पष्ट नहीं देखा जाता है। मैं कुछ अन्य उत्तर के माध्यम से इस पाया:

http://docs.celeryproject.org/en/latest/internals/reference/celery.worker.autoreload.html

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

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