2016-03-08 20 views
6

Ho un'applicazione GAE che voglio integrare con Sendgrid. Ho seguito le istruzioni (https://cloud.google.com/appengine/docs/python/mail/sendgrid) su come installare Sendgrid e tutto funziona correttamente nel mio ambiente dev locale.Impossibile importare sendgrid nell'applicazione GAE

Tuttavia, quando spingo la mia domanda di GAE ed eseguirlo, ho subito visualizzato il seguente errore 500 del server:

Error: Server Error

The server encountered an error and could not complete your request. Please try again in 30 seconds.

Anche con debug, è tutto quello che ho. Ma scavando nei log in GAE posso vedere l'origine del problema:

Traceback (most recent call last): File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler handler, path, err = LoadObject(self._handler) File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject obj = ____import____(path[0]) File "/base/data/home/apps/....wsgi_app.py", line 16, in import sendgrid File "/base/data/home/apps/..../sendgrid/____init____.py", line 7, in from .client import SendGridAPIClient File "/base/data/home/apps/..../sendgrid/client.py", line 1, in import python_http_client ImportError: No module named python_http_client

Così sono andato in SendGrid/client.py e commentate la seguente riga di codice ...

import python_http_client 

Una volta eseguita questa operazione, posso eseguire la mia app senza ricevere l'errore 500 Server ma l'e-mail di prova che ho provato a inviare non è stata recapitata (anche se non ho ricevuto alcun messaggio di errore durante il tentativo di avviarlo).

Non sembra giusto che io debba commentare una riga del codice Sendgrid per fare in modo che l'importazione funzioni e non riesco a capire perché altri che stanno eseguendo Sendgrid con Python e GAE non stanno avendo lo stesso problema. Ogni pensiero sarebbe apprezzato. Grazie.

risposta

7

sendgrid ha bisogno di python_http_client, che SendGrid si mantiene a https://github.com/sendgrid/python-http-client - basta copiare i pochi file nella directory https://github.com/sendgrid/python-http-client/tree/master/python_http_client in una directory denominata python_http_client, rendendo quest'ultimo un fratello della directory SendGrid. Non sono sicuro del motivo per cui i documenti online non lo menzionano: lavorerò per risolverlo, ma nel frattempo spero che questa soluzione ti consenta di iniziare.

+0

Perfetto: questo ha risolto il problema. Grazie Alex. – dsedwards

+0

Le istruzioni consigliano di installare sendgrid tramite pip install sendgrid. Questo dovrebbe fare attenzione alle dipendenze, immagino che questo sia il motivo per cui questo passaggio non è incluso ... – dyeray

+0

@dyeray, che funziona sul tuo 'dev_appserver' locale, ma non può funzionare su App Engine correttamente - non puoi eseguire 'pip' lì! Stiamo lavorando per correggere i documenti (eventualmente includendo l'uso corretto di https://cloud.google.com/appengine/docs/python/tools/libraries27#vendoring che manca anche da quella parte dei documenti, non un deve ma fortemente raccomandato). –