मेरी सर्विस में कोई सीक्रेट या रेफरेंस दिख नहीं रहा
आपने कोई सीक्रेट या ${{name.KEY}} रेफरेंस सेट किया, रीडिप्लॉय किया, फिर भी चल रही सर्विस को वह मान नहीं मिल रहा जिसकी आप उम्मीद कर रहे हैं।
इसका क्या मतलब है
आपका सेट किया हुआ मान सर्विस के मर्ज किए गए एनवायरनमेंट तक पहुँचा ही नहीं — या ऐप शुरू होने से पहले मर्ज के दौरान किसी और मान ने उसे ओवरराइट कर दिया।
ऐसा क्यों हो सकता है
- रेफरेंस का टारगेट या की मौजूद नहीं है। मौजूद न होने वाले सर्विस/ऐडऑन नाम का रेफरेंस, या ऐसी की का रेफरेंस जिसे वह ऐडऑन एक्सपोज़ नहीं करता, डिप्लॉय फ़ेल करने के बजाय खाली स्ट्रिंग बन जाता है। बिल्ड लॉग हर खाली रेफरेंस के लिए कारण सहित चेतावनी दिखाता है; जो वेरिएबल बदलाव बिना बिल्ड के, सिर्फ़ रीस्टार्ट से लागू होता है, उस पर कोई चेतावनी नहीं दिखती।
lizard secrets setया डैशबोर्ड से सेट किए गए रेफरेंस के लिए, जिस टारगेट का नाम बदल दिया गया है वह मौजूद नहीं माना जाता: ये रेफरेंस मौजूदा नाम से मैच होते हैं। टारगेट सर्विस वेDATABASE_URLयाREDIS_URLएक्सपोज़ नहीं करती जिन्हें Lizard उसमें इंजेक्ट करता है; इनके लिए सीधे ऐडऑन का रेफरेंस दें। - ज़्यादा प्राथमिकता वाले किसी मान ने इसे ओवरराइड कर दिया। मान एक तय क्रम में मर्ज होते हैं —
addon-issued env < project secrets < project env < app env < app secrets < platform vars— इसलिए उसी की वाला सर्विस-स्कोप सीक्रेट, प्रोजेक्ट-स्कोप (--global) सीक्रेट को चुपचाप ओवरराइड कर सकता है, और प्लेटफ़ॉर्म वेरिएबल (PORT,LIZARD_SERVICE_NAME,LIZARD_PROJECT_ID,LIZARD_PUBLIC_DOMAIN,LIZARD_PRIVATE_DOMAIN) हमेशा लागू होते हैं। आपका सेट किया हुआPORTरूटिंग सिर्फ़ उसी सर्विस पर बदलता है जिसका पोर्ट कभी सेट नहीं किया गया। जो सर्विसlizard upसे बनी है, या जिसे--port,lizard portया डैशबोर्ड से पोर्ट दिया गया है, उस पर Lizard आपका यह मान ओवरराइट कर देता है; पोर्टlizard port <n>से बदलें। - बिल्ड-टाइम मान बिल्ड तक नहीं पहुँचा। ज़्यादातर वेरिएबल बदलाव बिना रीबिल्ड के लागू होते हैं — नए मान लागू करने के लिए सर्विस रीस्टार्ट होती है।
VITE_*औरNEXT_PUBLIC_*मान बिल्ड किए गए एसेट्स में बेक हो जाते हैं, और इनमें से किसी कोlizard secrets setसे या सर्विस की सेटिंग्स में बदलने पर चल रही सर्विसेज़ का रीबिल्ड तुरंत शुरू हो जाता है। डैशबोर्ड के प्रोजेक्ट Secrets पेज पर किया गया एडिट कोई रीबिल्ड शुरू नहीं करता। जो सर्विस उस समय क्रैश या स्टॉप थी, उसे छोड़ दिया जाता है। कस्टमdockerfilePathवाली सर्विस, या बिल्ड/स्टार्ट कमांड के बिनाlizard upसे अपलोड की गई सर्विस को ये मान बिल्ड के समय कभी नहीं मिलते।
संभावित समाधान
बिल्ड लॉग में खाली रेफरेंस जाँचें
सर्विसेज़ में शेल एक्सेस (lizard ssh) बंद है। इसलिए बिल्ड लॉग ही देखने की जगह है: हर खाली रेफरेंस के लिए उसमें कारण सहित ==> Warning: ... is empty जैसी लाइन होती है।
lizard logs --build --service apiफिर ऐडऑन की कीज़ और हर सर्विस की LIZARD_* और PORT कीज़ की लिस्ट निकालें, और उनके नाम और की को अपने रेफरेंस से मिलाएँ। दूसरी सर्विस के अपने वेरिएबल और सीक्रेट्स के रेफरेंस काम करते हैं, पर इस लिस्ट में नहीं दिखते; उन्हें lizard secrets list --service <target> से जाँचें। कीज़ को ऐडऑन के डॉक्यूमेंटेड वेरिएबल से मिलाएँ:
lizard secrets list --service api --refस्कोप टकराव जाँचें
दोनों स्कोप के सीक्रेट्स लिस्ट करें और तुलना करें:
lizard secrets list --service api --show
lizard secrets list --global --showयाद रखें, ऐप सीक्रेट्स प्रोजेक्ट सीक्रेट्स को ओवरराइड करते हैं — अगर उसी की के लिए सर्विस-स्कोप मान मौजूद है, तो --global से सेट किए गए किसी भी मान के ऊपर वही लागू होता है।
बिल्ड-टाइम बदलाव के बाद रीबिल्ड करें
अगर बदली गई की VITE_* या NEXT_PUBLIC_* है, और बदलाव के समय सर्विस क्रैश या स्टॉप थी, या आपने इसे डैशबोर्ड के प्रोजेक्ट Secrets पेज पर बदला था, तो रीबिल्ड ट्रिगर करें:
lizard redeploy --service apiबिल्ड-टाइम बनाम रनटाइम और बिल्ड पाइपलाइन → रीबिल्ड किन वजहों से होता है देखें।
यह भी देखें
- वेरिएबल और सीक्रेट — स्कोपिंग और प्राथमिकता।
- क्रॉस-सर्विस रेफरेंस — रेफरेंस का सिंटैक्स और रिज़ॉल्यूशन।
अपडेट: