समस्या हल करना

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

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

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

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

सिंटैक्स की गड़बड़ियां, उस कोड को लिखने से होती हैं जो 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 को कॉल करने पर ईमेल पते के लिए "john" वैल्यू पास कर रहे हैं. यह एक मान्य ईमेल पता नहीं है. इसलिए, स्क्रिप्ट चलाते समय यह गड़बड़ी हो सकती है:

अमान्य ईमेल: जॉन (पंक्ति 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 ग्राहक हैं जिसे किसी इंस्टॉल किए जा सकने वाले ट्रिगर से हाल ही में यह चेतावनी दिख रही है, तो पक्का करें कि वह ट्रिगर आपके संगठन के उपयोगकर्ता के तौर पर काम कर रहा हो.

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

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

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

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

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

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

बेहतर सेवा की मदद से 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 Script में जानकारी को लॉग करने के दो तरीके हैं: क्लाउड लॉगिंग सेवा और Apps Script एडिटर में पहले से मौजूद, लॉगर और कंसोल की सेवाएं.

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

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

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

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

कार्यान्वयन

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

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

Apps Script सेवा की स्थिति की जांच की जा रही है

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सहायता पाना

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