समस्या का हल

यहां तक कि सबसे अनुभवी डेवलपर भी पहली बार में ही सही तरीके से कोड लिखता है. इस वजह से, समस्या हल करना भी डेवलपमेंट प्रोसेस का एक अहम हिस्सा होता है. इस सेक्शन में, हम कुछ ऐसी तकनीकों के बारे में बताएंगे जिनकी मदद से स्क्रिप्ट में मौजूद गड़बड़ियों को ढूंढा, समझा जा सकता है, और उन्हें डीबग किया जा सकता है.

गड़बड़ी के मैसेज

जब आपकी स्क्रिप्ट को कोई गड़बड़ी मिलती है, तो एक गड़बड़ी का मैसेज दिखता है. इस मैसेज के साथ एक लाइन नंबर भी होता है, जिसका इस्तेमाल समस्या हल करने के लिए किया जाता है. इस तरह से दो बुनियादी तरह की गड़बड़ियां दिखती हैं: सिंटैक्स गड़बड़ियां और रनटाइम की गड़बड़ियां.

सिंटैक्स की गड़बड़ियां

सिंटैक्स की गड़बड़ियां ऐसे कोड लिखने की वजह से होती हैं जो JavaScript व्याकरण का पालन नहीं करता. स्क्रिप्ट को सेव करने की कोशिश करते ही उन गड़बड़ियों का पता चल जाता है. उदाहरण के लिए, नीचे दिए गए कोड स्निपेट में एक सिंटैक्स गड़बड़ी है:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

सिंटैक्स की समस्या में चौथी लाइन के आखिर में ) वर्ण मौजूद नहीं है. स्क्रिप्ट सेव करने की कोशिश करने पर, आपको यह गड़बड़ी दिखेगी:

तर्क सूची के बाद लापता ). (पंक्ति 4)

आम तौर पर, इस तरह की गड़बड़ियों को आसानी से ठीक किया जा सकता है, क्योंकि उनका पता तुरंत चल जाता है और आम तौर पर इनकी कुछ सामान्य वजहें होती हैं. आप ऐसी फ़ाइल सेव नहीं कर पा रहे हैं जिसमें सिंटैक्स की गड़बड़ियां हैं. इसका मतलब है कि आपके प्रोजेक्ट में सिर्फ़ मान्य कोड सेव है.

रनटाइम की गड़बड़ियां

ये गड़बड़ियां फ़ंक्शन या क्लास का गलत तरीके से इस्तेमाल करने की वजह से होती हैं. इनका पता सिर्फ़ स्क्रिप्ट के चलने के बाद ही लगाया जा सकता है. उदाहरण के लिए, नीचे दिए गए कोड की वजह से रनटाइम की गड़बड़ी होती है:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

कोड का फ़ॉर्मैट सही है, लेकिन MailApp.sendEmail को कॉल करते समय हम ईमेल पते के लिए "जॉन" वैल्यू पास कर रहे हैं. यह मान्य ईमेल पता नहीं है, इसलिए स्क्रिप्ट चलाते समय यह गड़बड़ी होती है:

अमान्य ईमेल: जीवन (पंक्ति 5)

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

आम गड़बड़ियां

नीचे सामान्य गड़बड़ियों और उनके कारणों की सूची दी गई है.

सेवा का कई बार अनुरोध किया गया: <action name>

इस गड़बड़ी का मतलब है कि आपने किसी कार्रवाई के लिए, हर दिन की तय सीमा पार कर ली है. उदाहरण के लिए, एक दिन में कई ईमेल भेजने पर, आपको गड़बड़ी का यह मैसेज दिख सकता है. यह कोटा, उपभोक्ता, डोमेन, और प्रीमियर खातों के लिए अलग-अलग लेवल पर सेट किया जाता है. Google की अनुमति के बिना, इनमें किसी भी समय बदलाव किया जा सकता है. Apps Script के दस्तावेज़ में, अलग-अलग कार्रवाइयों के लिए तय की गई कोटा की सीमाएं देखी जा सकती हैं.

सर्वर उपलब्ध नहीं है. या सर्वर में कोई गड़बड़ी हुई, कृपया फिर से कोशिश करें.

इन गड़बड़ियों के पीछे कुछ वजहें हो सकती हैं:

  • Google सर्वर या सिस्टम अस्थायी रूप से अनुपलब्ध है. कुछ क्षण इंतज़ार करें और स्क्रिप्ट फिर से चलाने का प्रयास करें.
  • आपकी स्क्रिप्ट में ऐसी गड़बड़ी है जिसके लिए गड़बड़ी का कोई मैसेज नहीं है. अपनी स्क्रिप्ट को डीबग करने की कोशिश करें और देखें कि आप समस्या को दूर कर सकते हैं या नहीं.
  • Google Apps Script में किसी गड़बड़ी की वजह से यह गड़बड़ी हो रही है. बग रिपोर्ट खोजने और दर्ज करने के निर्देशों के लिए, गड़बड़ी देखें. नई गड़बड़ी दर्ज करने से पहले, यह देखें कि क्या अन्य लोगों ने पहले ही इसकी रिपोर्ट की है.

इस कार्रवाई के लिए अनुमति लेना ज़रूरी है.

यह गड़बड़ी बताती है कि स्क्रिप्ट को चलाने के लिए ज़रूरी अनुमति नहीं है. जब स्क्रिप्ट एडिटर या कस्टम मेन्यू आइटम से कोई स्क्रिप्ट चलती है, तो उपयोगकर्ता को अनुमति देने वाला डायलॉग दिखाया जाता है. हालांकि, जब स्क्रिप्ट को Google Sites के पेज के साथ एम्बेड किए गए किसी ट्रिगर से चलाया जाता है या उसे सेवा के तौर पर चलाया जाता है, तो डायलॉग नहीं दिखाया जा सकता. साथ ही, यह गड़बड़ी दिखती है.

स्क्रिप्ट को अनुमति देने के लिए, स्क्रिप्ट एडिटर खोलें और कोई भी फ़ंक्शन चलाएं. इसके बाद, आपको अनुमति देने का अनुरोध दिखेगा, ताकि आप स्क्रिप्ट प्रोजेक्ट को अनुमति दे सकें. अगर स्क्रिप्ट में बिना अनुमति वाली नई सेवाएं शामिल हैं, तो आपको स्क्रिप्ट को फिर से अनुमति देनी होगी.

यह गड़बड़ी अक्सर ऐसे ट्रिगर की वजह से होती है जो उपयोगकर्ता के अनुमति देने से पहले ही फ़ायर हो जाते हैं. अगर आपके पास स्क्रिप्ट प्रोजेक्ट का ऐक्सेस नहीं है (उदाहरण के लिए, उदाहरण के तौर पर इस्तेमाल किए जाने वाले ऐड-ऑन में गड़बड़ी हो रही है), तो आम तौर पर ऐड-ऑन का फिर से इस्तेमाल करके स्क्रिप्ट को अनुमति दी जा सकती है. अगर कोई ट्रिगर सक्रिय होता रहता है और उसकी वजह से यह गड़बड़ी होती है, तो आप ये काम करके अपने ट्रिगर हटा सकते हैं:

  1. Apps Script प्रोजेक्ट की बाईं ओर, ट्रिगर पर क्लिक करें.
  2. आपको जिस ट्रिगर को हटाना है उसकी दाईं ओर, ज़्यादा > ट्रिगर मिटाएं पर क्लिक करें.

ऐड-ऑन को अनइंस्टॉल करके, समस्या वाले ऐड-ऑन ट्रिगर भी हटाए जा सकते हैं.

ऐक्सेस नहीं दिया गया: DriveApp या डोमेन नीति ने तीसरे पक्ष के Drive ऐप्लिकेशन को बंद कर दिया है

Google Workspace डोमेन के एडमिन अपने डोमेन के लिए, Drive API बंद कर सकते हैं. इससे उनके उपयोगकर्ता, Google Drive ऐप्लिकेशन इंस्टॉल और इस्तेमाल नहीं कर पाएंगे. यह सेटिंग उपयोगकर्ताओं को उन Apps Script ऐड-ऑन का इस्तेमाल करने से भी रोकती है जो Drive सेवा या बेहतर Drive सेवा का इस्तेमाल करते हैं. भले ही, एडमिन ने Drive API को बंद करने से पहले स्क्रिप्ट को अनुमति दी हो.

हालांकि, अगर Drive सेवा का इस्तेमाल करने वाले किसी ऐड-ऑन या वेब ऐप्लिकेशन को पूरे डोमेन पर इंस्टॉल करने के लिए पब्लिश किया गया है और एडमिन ने उसे डोमेन के कुछ या सभी उपयोगकर्ताओं के लिए इंस्टॉल किया है, तो डोमेन में Drive API बंद होने के बावजूद, उन उपयोगकर्ताओं के लिए स्क्रिप्ट काम करेगी.

स्क्रिप्ट के पास सक्रिय उपयोगकर्ता की पहचान हासिल करने की अनुमति नहीं है.

इससे पता चलता है कि सक्रिय उपयोगकर्ता की पहचान और ईमेल पता, स्क्रिप्ट में उपलब्ध नहीं है. यह चेतावनी, Session.getActiveUser() को किए गए कॉल की वजह से मिली है. अगर स्क्रिप्ट AuthMode.FULL के बजाय, अनुमति वाले मोड में चल रही है, तो Session.getEffectiveUser() को भी कॉल किया जा सकता है. अगर यह चेतावनी सिग्नल दिखती है, तो User.getEmail() को बाद में किए जाने वाले कॉल के लिए, सिर्फ़ "" वापस भेजा जाता है.

इस चेतावनी की समस्या कई तरह से हल की जा सकती है. यह इस बात पर निर्भर करता है कि स्क्रिप्ट किस ऑथराइज़ेशन मोड में चल रही है. अनुमति देने वाला मोड, ट्रिगर किए गए फ़ंक्शन में, e इवेंट पैरामीटर की authMode प्रॉपर्टी के तौर पर दिखता है.

  • इसके बजाय, AuthMode.FULL में Session.getEffectiveUser() का इस्तेमाल करें.
  • AuthMode.LIMITED में, पक्का करें कि मालिक ने स्क्रिप्ट को अनुमति दी है.
  • अनुमति देने वाले अन्य मोड में, किसी भी तरीके को कॉल करने से बचें.
  • अगर आप Google Workspace ग्राहक हैं और आपको इंस्टॉल किए जा सकने वाले ट्रिगर की वजह से इस चेतावनी का सामना करना पड़ रहा है, तो पक्का करें कि आपके संगठन में ट्रिगर, उपयोगकर्ता के तौर पर चल रहा हो.

लाइब्रेरी मौजूद नहीं है

अगर आपने अपनी स्क्रिप्ट में कोई लोकप्रिय लाइब्रेरी जोड़ी है, तो हो सकता है कि आपको गड़बड़ी का एक मैसेज मिले, जिसमें यह बताया गया हो कि वह लाइब्रेरी मौजूद नहीं है. भले ही, लाइब्रेरी आपकी स्क्रिप्ट के लिए डिपेंडेंसी के तौर पर रजिस्टर की गई हो. इसकी वजह यह हो सकती है कि एक साथ कई लोग लाइब्रेरी को ऐक्सेस कर रहे हों. इस गड़बड़ी से बचने के लिए, इनमें से कोई एक तरीका आज़माएं:

  • लाइब्रेरी के कोड को कॉपी करके अपनी स्क्रिप्ट में चिपकाएं और लाइब्रेरी डिपेंडेंसी हटाएं.
  • लाइब्रेरी स्क्रिप्ट कॉपी करें और उसे अपने खाते से लाइब्रेरी के रूप में डिप्लॉय करें. अपनी ओरिजनल स्क्रिप्ट में मौजूद डिपेंडेंसी को सार्वजनिक लाइब्रेरी के बजाय नई लाइब्रेरी में अपडेट करना न भूलें.

लाइब्रेरी का वर्शन मौजूद न होने या मिटाए गए वर्शन पर डिप्लॉयमेंट की वजह से गड़बड़ी हुई है. गड़बड़ी का कोड नहीं मिला

गड़बड़ी के इस मैसेज में, इनमें से कोई एक जानकारी दिख रही है:

  • स्क्रिप्ट का परिनियोजित वर्शन हटा दिया गया है. अपनी स्क्रिप्ट के डिप्लॉय किए गए वर्शन को अपडेट करने के लिए, वर्शन वाले डिप्लॉयमेंट में बदलाव करना लेख पढ़ें.
  • स्क्रिप्ट द्वारा उपयोग की जाने वाली लाइब्रेरी के वर्शन को हटा दिया गया है. यह देखने के लिए कि कौनसी लाइब्रेरी मौजूद नहीं है, लाइब्रेरी के नाम के बगल में, ज़्यादा > नए टैब में खोलें पर क्लिक करें. लाइब्रेरी मौजूद न होने पर गड़बड़ी का मैसेज मिलता है. आपको जिस लाइब्रेरी को अपडेट करना है उसे ढूंढने के बाद, इनमें से कोई एक कार्रवाई करें:
  • आपकी स्क्रिप्ट, लाइब्रेरी की जिस स्क्रिप्ट का इस्तेमाल करती है उसमें एक और लाइब्रेरी होती है, जो मिटाए गए वर्शन का इस्तेमाल करती है. इनमें से कोई एक कार्रवाई करें:
    • अगर आपके पास अपनी स्क्रिप्ट का इस्तेमाल करने वाली लाइब्रेरी में बदलाव करने का ऐक्सेस है, तो उस स्क्रिप्ट में मौजूद दूसरी लाइब्रेरी को किसी मौजूदा वर्शन में अपडेट करें.
    • कोई दूसरा वर्शन इस्तेमाल करने के लिए, लाइब्रेरी को अपडेट करें. लाइब्रेरी अपडेट करें देखें.
    • अपने स्क्रिप्ट प्रोजेक्ट और कोड से लाइब्रेरी हटाएं. लाइब्रेरी हटाएं देखें.

बेहतर सेवा का इस्तेमाल करके, Google Chat API को कॉल करते समय Error 400: invalid_scope

अगर आपको गड़बड़ी का मैसेज Some requested scopes cannot be shown के साथ Error 400: invalid_scope मिलता है, तो इसका मतलब है कि आपने Apps Script प्रोजेक्ट की appsscript.json फ़ाइल में, अनुमति देने का कोई स्कोप तय नहीं किया है. ज़्यादातर मामलों में, Apps Script अपने-आप तय करती है कि स्क्रिप्ट के लिए किन दायरों की ज़रूरत है. हालांकि, Chat की ऐडवांस सेवा का इस्तेमाल करते समय, आपको अनुमति के उन दायरे को मैन्युअल तौर पर जोड़ना होगा जिनका इस्तेमाल, आपकी स्क्रिप्ट आपके Apps Script प्रोजेक्ट की मेनिफ़ेस्ट फ़ाइल में करती है. अश्लील कॉन्टेंट वाले स्कोप सेट करने का तरीका देखें.

गड़बड़ी को ठीक करने के लिए, Apps Script प्रोजेक्ट की appsscript.json फ़ाइल में oauthScopes कलेक्शन के हिस्से के तौर पर, अनुमति के सही स्कोप जोड़ें. उदाहरण के लिए, spaces.messages.create तरीके का इस्तेमाल करने के लिए, यह जानकारी जोड़ें:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

डीबग करना

सभी गलतियों की वजह से, गड़बड़ी का मैसेज नहीं दिखता. कोड के तकनीकी तौर पर सही होने और उसे लागू करने में थोड़ी-बहुत गड़बड़ी हो सकती है, लेकिन नतीजे आपकी उम्मीद के मुताबिक नहीं होंगे. ऐसी स्थितियों से निपटने और आपकी उम्मीद के मुताबिक काम न करने वाली स्क्रिप्ट की आगे जांच करने के लिए, यहां कुछ रणनीतियां दी गई हैं.

लॉगिंग

डीबग करते समय, स्क्रिप्ट प्रोजेक्ट के चलने के दौरान जानकारी को रिकॉर्ड करना अक्सर फ़ायदेमंद होता है. 'Google Apps स्क्रिप्ट' में जानकारी लॉग करने के दो तरीके हैं: क्लाउड लॉगिंग सेवा और Apps Script एडिटर में पहले से मौजूद ज़्यादा बुनियादी लॉगर और कंसोल सेवाएं.

ज़्यादा जानकारी के लिए, लॉग इन करने की गाइड देखें.

रिपोर्ट करते समय गड़बड़ी हुई

रनटाइम की गड़बड़ियों की वजह से होने वाले अपवादों को, Google Cloud की गड़बड़ी की रिपोर्टिंग सेवा का इस्तेमाल करके, अपने-आप रिकॉर्ड कर लिया जाता है. इस सेवा की मदद से, आपके स्क्रिप्ट प्रोजेक्ट के बनाए गए अपवाद वाले मैसेज खोजे और फ़िल्टर किए जा सकते हैं.

गड़बड़ी की रिपोर्ट को ऐक्सेस करने के लिए, Google Cloud Platform कंसोल में क्लाउड लॉग और गड़बड़ी की रिपोर्ट देखें पर जाएं.

कार्यान्वयन

जब भी किसी स्क्रिप्ट को चलाया जाता है, तो Apps Script एक्ज़ीक्यूशन का रिकॉर्ड बनाती है. इसमें क्लाउड लॉग भी शामिल होते हैं. इन रिकॉर्ड की मदद से, यह पता किया जा सकता है कि आपकी स्क्रिप्ट ने कौनसी कार्रवाइयां की हैं.

Apps Script प्रोजेक्ट में, स्क्रिप्ट को लागू करने की प्रोसेस देखने के लिए, बाईं ओर लागू की गई कार्रवाइयां पर क्लिक करें.

Apps Script सेवा के स्टेटस की जांच की जा रही है

हालांकि, ऐसा बहुत कम होता है. कभी-कभी Gmail या Drive जैसी Google Workspace की कुछ खास सेवाओं में कुछ समय के लिए समस्याएं आती हैं. इसकी वजह से, सेवाएं कुछ समय के लिए बंद हो सकती हैं. ऐसा होने पर, हो सकता है कि इन सेवाओं के साथ इंटरैक्ट करने वाले Apps Script प्रोजेक्ट उम्मीद के मुताबिक काम न करें.

Google Workspace स्थिति डैशबोर्ड पर जाकर, यह पता लगाया जा सकता है कि क्या Google Workspace की सेवा खत्म हो गई है. अगर किसी समस्या का सामना करना पड़ रहा है, तो समस्या के ठीक होने का इंतज़ार करें या Google Workspace सहायता केंद्र या Google Workspace की 'पहले से मालूम समस्याएं' दस्तावेज़ में अतिरिक्त मदद मांगें.

डीबगर और ब्रेकपॉइंट का इस्तेमाल करना

अपनी स्क्रिप्ट में समस्याओं का पता लगाने के लिए, आप उसे डीबग मोड में चला सकते है. डीबग मोड में चलाए जाने पर, जब कोई स्क्रिप्ट ब्रेकपॉइंट पर हिट करती है, तो वह रुक जाती है. ब्रेकपॉइंट, एक ऐसी लाइन होती है जिसे आपने अपनी स्क्रिप्ट में हाइलाइट किया है और आपको लगता है कि इसमें समस्या हो सकती है. जब कोई स्क्रिप्ट रुकती है, तो वह उस समय हर वैरिएबल की वैल्यू दिखाती है. इससे, बहुत सारे लॉगिंग स्टेटमेंट जोड़े बिना, स्क्रिप्ट के अंदरूनी काम की जांच की जा सकती है.

ब्रेकपॉइंट जोड़ें

ब्रेकपॉइंट जोड़ने के लिए, उस लाइन की लाइन नंबर पर कर्सर घुमाएं जिसमें आपको ब्रेकपॉइंट जोड़ना है. लाइन नंबर की बाईं ओर मौजूद सर्कल पर क्लिक करें. नीचे दी गई इमेज में, स्क्रिप्ट में जोड़े गए ब्रेकपॉइंट का उदाहरण दिखाया गया है:

ब्रेकपॉइंट जोड़ें

डीबग मोड में स्क्रिप्ट चलाना

स्क्रिप्ट को डीबग मोड में चलाने के लिए, एडिटर में सबसे ऊपर मौजूद डीबग पर क्लिक करें.

स्क्रिप्ट ब्रेकपॉइंट वाली लाइन को चलाने से पहले, रुक जाती है और डीबग करने की जानकारी वाली टेबल दिखाती है. इस टेबल का इस्तेमाल करके, पैरामीटर की वैल्यू और ऑब्जेक्ट में सेव की गई जानकारी जैसे डेटा की जांच की जा सकती है.

स्क्रिप्ट चलाने का तरीका कंट्रोल करने के लिए, डीबगर पैनल में सबसे ऊपर, "चरण लागू करें", "चरण खत्म करें", और "बाहर निकलें" बटन का इस्तेमाल करें. इनकी मदद से, एक बार में स्क्रिप्ट को एक लाइन में चलाया जा सकता है. साथ ही, यह जांच की जा सकती है कि समय के साथ वैल्यू कैसे बदलती हैं.

एक से ज़्यादा Google खातों से जुड़ी समस्याएं

अगर आपने एक ही समय पर कई Google खातों में लॉग इन किया हुआ है, तो आपको अपने ऐड-ऑन और वेब ऐप्लिकेशन ऐक्सेस करने में समस्या आ सकती है. ऐप्लिकेशन स्क्रिप्ट, ऐड-ऑन या वेब ऐप्लिकेशन के लिए, एक से ज़्यादा बार लॉगिन करने या एक साथ कई Google खातों में लॉग इन करने की सुविधा काम नहीं करती.

  • अगर आपने Apps Script एडिटर में एक से ज़्यादा खातों में लॉग इन किया हुआ है, तो Google आपको उस खाते को चुनने का अनुरोध करेगा जिसे आपको इस्तेमाल करना है.

  • अगर आपका कोई वेब ऐप्लिकेशन या ऐड-ऑन है और आपको एक से ज़्यादा लॉगिन करने में समस्या आ रही है, तो इनमें से कोई एक तरीका आज़माएं:

    • अपने सभी Google खातों से लॉग आउट करें और सिर्फ़ उस खाते में लॉग इन करें जिसमें वह ऐड-ऑन या वेब ऐप्लिकेशन मौजूद है जिसे आपको ऐक्सेस करना है.
    • Google Chrome में एक गुप्त विंडो या ऐसी ही कोई निजी ब्राउज़िंग विंडो खोलें. इसके बाद, उस Google खाते में लॉग इन करें जिसमें वह ऐड-ऑन या वेब ऐप्लिकेशन मौजूद है जिसे आपको ऐक्सेस करना है.

सहायता पाना

ऊपर दिए गए टूल और तकनीकों का इस्तेमाल करके, किसी समस्या को डीबग करने के लिए कई तरह की समस्याएं हल की जा सकती हैं. हालांकि, कुछ समस्याएं भी हल हो सकती हैं जिन्हें हल करने के लिए आपको ज़्यादा मदद की ज़रूरत होती है. सवाल पूछने और गड़बड़ियों की शिकायत करने के बारे में जानकारी पाने के लिए, हमारा सहायता पेज देखें.