2015-06-26 25 views
6

Durante il tentativo di integrare couchbase mobile (versione 1.1.0) nella nostra app mobile ibrida (ionica), abbiamo riscontrato un problema con la replica push su iOS.Replicazione mobile Couchbase tramite REST-API

A un certo punto dell'applicazione (dopo che il database locale è stato creato e così via) viene creato correttamente un documento di progettazione con alcune viste. Viene creata e avviata anche una replica push e pull continua.

Durante il polling per lo stato di replica push abbiamo notato che si era fermato (non normale per una replica continua) poco dopo essere stato avviato.

Couchbase cellulare ha risposto con un errore (404)

WARNING: CBL_Pusher[http://server:4985/bucket-sync-gateway]: _bulk_docs got an error: { 
    error = "bad_request"; 
    id = "_design/app"; 
    reason = "Invalid doc ID"; 
    status = 400; 
} 

Il gateway di sincronizzazione registrato un errore simile:

BulkDocs: Doc "_design/app" --> 400 Invalid doc ID (400 Invalid doc ID) 

Ciò accade soltanto su iOS. La versione di Android non ha problemi con le repliche (forse i documenti di progettazione vengono ignorati?)

  • Perché la replica tenta di sincronizzare i documenti di progettazione su iOS e non su Android?
  • I documenti di progettazione devono essere sincronizzati?
  • C'è un modo per impedire la sincronizzazione di determinati documenti? (L'API nativa fornisce un meccanismo di filtraggio sulle repliche, ma il resto non lo fa)

Qualche idea di quale potrebbe essere il problema qui?

Cheers,

Bert

risposta

2

Quali versioni di Couchbase Lite e Sync Gateway stai usando? Credo che il comportamento sia migliorato nella versione 1.1 di ciascuno. In particolare, Sync Gateway ora restituisce 403 Forbidden anziché 400 Bad Request quando un client tenta di caricare un documento di progettazione. Il replicatore di Couchbase Lite continuerà a funzionare dopo questo stato invece di fermarsi con un errore.

I documenti di progettazione sono problematici poiché in genere contengono codice eseguibile (JavaScript) sotto forma di funzioni mappa, riduzione o filtro. Per motivi di sicurezza, il gateway Sync (come CouchDB) non consentirà a un client non amministratore di caricarne uno. Peggio, probabilmente è una violazione del contratto con gli sviluppatori Apple di fare in modo che l'app per iOS scarichi un documento di progettazione, dal momento che le app non sono autorizzate a eseguire il codice scaricato. (La ragione per cui dico "probabilmente" è perché l'eccezione è il codice JavaScript in esecuzione in un browser Web. Il documento di progettazione contiene JS e il codice dell'app PhoneGap viene eseguito in un browser, ma le funzioni mappa/riduzione/filtro non vengono eseguite il browser, ma in un contesto JS separato invocato da Couchbase Lite, non sono un avvocato e non ho idea di cosa penserebbe Apple. Per quanto ne so, non è mai venuto fuori.)

-Jens Alfke (Mobile Architect , Couchbase)

+0

Grazie per gli avvertimenti sulle regole meschine di Apple. – chicks

+0

Heh. Non direi che sono "meschine" - le regole hanno senso dal punto di vista della sicurezza poiché eliminano una vasta gamma di vulnerabilità di esecuzione di codice remoto da interpreti buggy (come Flash). Forse "eccessivamente rigidi". –

+0

Ciao Jens, stiamo usando couchbase lite 1.1 e gateway di sincronizzazione 1.0.4-34. Proveremo prima il nuovo gateway di sincronizzazione. Sapremo come va. Grazie per il suggerimento! – Bert