2017-10-11 22 views
0

Je développe un microservice en fiole pour exposer certaines données d'une base de données de cassandra. Il est servi avec gunicorn appelé depuis la ligne de commande. Le problème est que je suis confus quant à savoir où et comment se connecter à la base de données, en particulier lorsque l'on considère comment se moquer ou contourner le besoin de la base de données lors de tests unitaires.Connexion du flacon post-fourche au cassandra

Ma première tentative a été de se connecter à l'application moment de la création comme suit

def create_app(): 
    app = Flask(__name__) 

    app.debug = True 

    cluster = Cluster([os.environ['CASSANDRA_HOST']]) 
    app.cassandra = cluster.connect(os.environ['CASSANDRA_KEYSPACE']) 

    return app 

pensant que ça va faire une seule connexion « globale » réduction des frais généraux pour chaque demande individuelle. Cela échoue clairement aux tests unitaires car il essayera de se connecter, ce qui n'est pas le but d'un test unitaire dans un environnement isolé d'un pipeline CI. Puis, en vérifiant certains slides des gens de Cassandra, il est dit que pour flask, il faut utiliser @app.before_first_request et qu'en règle générale, il faut se connecter "post-fork". Je ne suis pas sûr de ce que signifie "post-fork" dans ce contexte.

Quoi qu'il en soit, en faisant

@app.before_first_request 
def before_request(): 
    app.cluster = Cluster([os.environ['CASSANDRA_HOST']]) 
    app.cassandra = app.cluster.connect(os.environ['CASSANDRA_KEYSPACE']) 

fonctionne aussi, mais toujours le même problème avec les tests unitaires isolé. En lisant ce post, je suppose que je n'ai pas de problèmes avec la connexion elle-même car je crée une session cassandra par flask qui est spawn par gunicorn (post-fork).

Ensuite, ma question permettrait de réduire la stratégie à suivre pour pouvoir tester les points finaux sans avoir à atteindre explicitement la base de données.

Répondre

0

L'idée générale est d'avoir un cluster/session par processus, créé sur fork et maintenu pour la durée de vie du processus. La plupart des serveurs offrent un «hook» post-fork pour la mise en place de ressources comme celle-ci.

Le crochet gunicorn est documenté here

analogique uwsgi est fait référence dans le driver FAQ.