पर गुप्त कुंजी के साथ एक जेसन फ़ाइल कैसे अपलोड करें मैं एक रेल ऐप बना रहा हूं जो रूबी के लिए Google एपी क्लाइंट लाइब्रेरी का उपयोग करके Google Analytics से डेटा खींचती है।Heroku
मैं ओएथ 2 का उपयोग कर रहा हूं और स्थानीय मशीन पर विकास में काम कर रहा सबकुछ प्राप्त कर सकता हूं। मेरी समस्या यह है कि लाइब्रेरी दो गुप्त कुंजी स्टोर करने के लिए डाउनलोड की गई फ़ाइल, client_secrets.json
का उपयोग करती है।
समस्या: मैं Heroku का उपयोग कर रहा हूं और फ़ाइल को उनके उत्पादन सर्वर पर प्राप्त करने के लिए एक तरीका चाहिए।
मैं इस फ़ाइल को अपने जीथब रेपो में जोड़ना नहीं चाहता क्योंकि परियोजना सार्वजनिक है।
यदि अस्थायी रूप से फ़ाइल को गिट में जोड़ने का तरीका है, तो हेरोकू को दबाएं, और ठीक से गिट से हटा दें। मेरी समझ यह है कि चाबियाँ कमेटी में होंगी और जिथूब पर दिखने से रोकने के लिए बहुत मुश्किल होगी।
कोशिश की गई: जहाँ तक मैं आपको बता सकता हूं कि आप बैश कंसोल के माध्यम से हेरोकू में एक फ़ाइल एससीपी नहीं कर सकते हैं। मेरा मानना है कि ऐसा करने पर आपको एक नया डिनो मिलता है और जो भी आप जोड़ते हैं वह केवल अस्थायी होगा। मैंने कोशिश की लेकिन एससीपी को सही तरीके से काम नहीं कर सका, इसलिए इस बारे में 100% निश्चित नहीं है।
कोशिश की गई: मैंने जेएसओएन फ़ाइल को पर्यावरण या कॉन्फ़िगर वार में संग्रहीत करने पर देखा, लेकिन इसे काम नहीं कर सका। अगर किसी के पास कोई विचार है तो यह जाने का सबसे अच्छा तरीका लगता है। जब मैं रूबी जेएसओएन को एक स्ट्रिंग या हैश में परिवर्तित करता हूं, तो अक्सर मैं परेशानी में पड़ता हूं, इसलिए संभवतः मुझे यहां मार्गदर्शन की आवश्यकता है।
की कोशिश की: साथ ही मैं एक तरह से यह पता लगाने की सिर्फ JSON फ़ाइल से चाबी बाहर खींच, उन्हें कॉन्फ़िग Vars में डाल दिया, और Git करने के लिए JSON फ़ाइल जोड़ने के लिए कोशिश की है। मैं एक JSON फ़ाइल में ENV["KEY"]
डालने का कोई तरीका नहीं समझ सकता।
उदाहरण कोड Google library has a method कि एक प्राधिकरण ग्राहक बनाने के लिए JSON फ़ाइल लोड करता है। क्लाइंट फिर टोकन लाता है (या एक प्राधिकरण यूआरएल देता है)।
client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json')
auth_client = client_secrets.to_authorization
** ध्यान दें कि गूगल पृष्ठ पर उदाहरण के एक फ़ाइल नाम है क्योंकि यह एक डिफ़ॉल्ट ENV वार एक रास्ता
लिए निर्धारित किया गया thats का उपयोग करता है प्रदर्शित नहीं करता है मैं समझ यह सब बहुत आसान है, तो हो सकता है ClientSecrets.load()
विधि जेएसओएन, एक स्ट्रिंग या हैश ले जाएगा जो एक कॉन्फ़ वर्र में जा सकती है।
दुर्भाग्यवश यह हमेशा एक फ़ाइल पथ चाहता है। जब मैं इसे JSON, एक स्ट्रिंग या हैश खिलाता हूं, तो यह उड़ाता है। I've seen someone get around the issue with a p12 key here, लेकिन मुझे यकीन नहीं है कि मेरी स्थिति में इसे दोहराना कैसे है।
प्रयास नहीं किया है: मेरे हालांकि केवल एक अन्य है (एक तरफ एडब्ल्यूएस में जाने से) एडब्ल्यूएस पर JSON फ़ाइल डाल दिया और रेल खींच जब जरूरत है। मुझे यकीन नहीं है कि यह फ्लाई पर किया जा सकता है या यदि रेल सर्वर बूट होने पर फ़ाइल को खींचने की आवश्यकता होगी। बहुत अधिक काम की तरह लगता है, लेकिन इस बिंदु पर मैंने कोशिश करने के लिए तैयार होने पर कुछ घंटे बिताए हैं। https://github.com/dladowitz/slapafy/blob/master/app/controllers/welcome_controller.rb
एनवी var (यानी, न्यूलाइन, उद्धरण) में आप अपने जेसन डेटा को कैसे संग्रहीत कर रहे हैं? मैं इसे कंसोल में इस लाइन के साथ आयात कर सकता हूं, लेकिन मैंने इसे आपके कंट्रोलर में ठीक तरह से स्थापित करने की कोशिश की है और मुझे इस लाइन को कॉल करते समय क्लाइंटसेक्रेट्स के प्रारंभिक फ़ंक्शन के अंदर "इंटीजर में सिंबल का कोई अंतर्निहित रूपांतरण नहीं है" । मुझे उस आइटम तक पहुंचने का प्रयास करने में कोई समस्या नहीं है जिस पर यह असफल रहा है, इसलिए इसे कहीं के बीच खो जाना चाहिए। – paullj1
मैं ** figaro ** मणि का उपयोग कर रहा हूं और फिर application.yml में अपने पर्यावरण चर को संग्रहीत कर रहा हूं। इस फ़ाइल में मैंने वैरिएबल सेट किया है: 'GOOGLE_CLIENT_SECRETS: '{" वेब ": {" client_id ":" XXXXXX-XXXXXXXXXXXX.apps.googleusercontent.com "," project_id ":" XXXX-XXXX " , "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": " https://www.googleapis.com/oauth2/v1/certs "," client_secret ":" xxxXXXXXXX "," redirect_uris ": [" http: // localhost: 3000/oauthredirect "]}} ' –
@ paullj1 हेरोकू में कॉन्फ़िगर वार मान लगभग समान है, लेकिन मैंने सबसे बाहरी एकल उद्धरण हटा दिए हैं। इसके ऊपर मेरे समाधान में ध्यान देने योग्य एक बात यह है कि मुझे एक अलग विधि मिली जो फ़ाइल नाम नहीं लेती। मूल रूप से मैं 'गूगल :: APIClient :: ClientSecrets.load() का उपयोग किया गया था' अब मैं 'उपयोग कर रहा हूँ गूगल :: APIClient :: ClientSecrets.new()' –