2016-06-01 4 views
1

Kürzlich zeigen einige meiner App-Skripte Fehler, wenn sie gleichzeitig ausgeführt werden. Alles hat seit Jahren gut funktioniert, offenbar geschah die Änderung auf Google-Seite.Dienst zu oft in kurzer Zeit aufgerufen: exec qps. (Google Script)

Dies ist die Ausführung Transkript Ergebnis: enter image description here

Leider tritt der Fehler nicht den Dateinamen und die Zeilennummer zeigen, es richtig zu debuggen, aber meine erste Zeile ist:

var ss = SpreadsheetApp.getActiveSpreadsheet() 

Daher nehme ich an Der Aufruf von SpreadsheetApp gleichzeitig durch Instanzen der App verursacht den Fehler. SpreadsheetApp befindet sich weder in der Schleife noch in einer Funktion. Es wird aufgerufen, globale Variable ss zu definieren, die von der App verwendet werden.

Meine Apps werden unter meinem Benutzernamen ausgeführt, da Benutzer keinen Zugriff auf die Tabelle haben sollten, auf die ich zugreife. Ich fürchte, ich kann nicht das gesamte Spreadsheet im Cache Service behalten - ich möchte, dass die App das Spreadsheet aktualisiert, wenn es aufgerufen wird.

UPDATE:

Hier sind einige relevante Code aus einer der Anwendungen.

function doGet(e){ 

    var ref = e.parameter.ref; 
    var ss = SpreadsheetApp.openById('########') 
    var logsheet = ss.getSheetByName('LOG'); 
    logsheet.appendRow([new Date(),ref,JSON.stringify(e.parameter)]) 
    try{ 
    //Main code goes here 
    return ContentService.createTextOutput(JSON.stringify({result:"ok"})).setMimeType(ContentService.MimeType.JSON); 
    }catch(e){ 
    return ContentService.createTextOutput(JSON.stringify(e)).setMimeType(ContentService.MimeType.JSON)} 
} 

Wie man sehen kann ich try {} catch (e) in meiner Funktion, und da der Fehler erhalte ich durch sie nicht gefangen wird, ich nehme an, es richtig, bevor passiert.

+1

Können Sie weitere Codezeilen aus Ihrem Skript freigeben? –

+0

Hallo Amit, ich habe viel von deinen Beispielen gelernt, danke! Ich habe einen Beispielcode hinzugefügt. Der Fehler tritt auf, bevor die Hauptausführung überhaupt gestartet wird. Dies deutet darauf hin, dass SpreadsheetApp-Aufrufe ausgeführt werden müssen. Manchmal wird meine App 20-30 mal pro Minute aufgerufen. Nicht so eine große Sache, sollte richtig behandelt werden, imo. Zumindest hat es für ein paar Jahre gut funktioniert. –

Antwort

1

Sie können alles in den try-catch-Block setzen. Denken Sie auch daran, eine neue Version der Web-App vor der Ausführung zu veröffentlichen.

function doGet(e) { 
    var response = {}; 
    try { 
     SpreadsheetApp.openById('########') 
      .getSheetByName('LOG') 
      .appendRow([new Date(), e.parameter.ref, JSON.stringify(e.parameter)]); 
     response.result = "OK"; 
    } catch (error) { 
     response.result = "Error: " + error.toString(); 
    } 

    return ContentService 
     .createTextOutput(JSON.stringify(response)) 
     .setMimeType(ContentService.MimeType.JSON); 
} 
+0

Danke, eigentlich war das das erste was ich ausprobiert habe, aber es hat nicht funktioniert. Wie Sie sehen können, wird ein Fehler in der Funktion gefunden - er sollte JSON mit Fehlerdetails als String zurückgeben, aber was ich sehe, ist die Skript-Webseite von google mit einer Fehlermeldung. Daher tritt ein Fehler außerhalb der Skala auf. Ich werde versuchen, den Screenshot zu greifen. Es sieht nicht nur nach SpreadsheetApp aus, sondern auch durch mehrere Aufrufe von urlFetch, die diesen Fehler auslösen. –

+0

Die Kontingentgrenzen sind unter https://developers.google.com/apps-script/guides/services/quotas#current_quotas verfügbar. –

+0

Es gibt kein explizites Kontingent für die Anzahl gleichzeitiger Apps-Ausführungen. Außerdem ist der Fehler, den ich bekomme, "exec qps" - entspricht keinem bekannten Dienst. Ich habe bemerkt, dass nachts, wenn meine Benutzer nicht im Büro sind, ich diesen Fehler nicht bekomme. –

0

entdeckte gerade manuellen Hack um diesen Fehler zu vermeiden:

aus privatem Browser-Modus öffnen Sie Ihre Tabelle. Dies erhöht die Anzahl der Dokument-Viewer und erhöht die Limits :)

Verwandte Themen