2015-01-03 15 views
5

Qual è il modo migliore per fare in modo che l'app meteor chiami uno script python che si trova sullo stesso computer del codice lato server meteor? Tutto quello che voglio fare è far passare una stringa a una funzione in python e fare in modo che python restituisca una stringa a meteora.Chiamare script Python in Meteor

Stavo pensando che potrei avere il monitor Python mongodb ed estrarre i valori e scriverli di nuovo a mongodb una volta calcolato, ma sembra molto più pulito avere la chiamata di meteora direttamente in python.

Sono nuovo di DDP e non sono riuscito ad andare molto lontano con python-meteor (https://github.com/hharnisc/python-meteor).

È ZeroRPC (http://zerorpc.dotcloud.com/) un buon modo per farlo?

Grazie.

risposta

6

Ottima domanda.

Ho cercato di usare DDP e ZeroRPC e persino di scrivere Python direttamente su Mongo.

Per me, il modo più semplice per parlare con Meteor e Python era impostare lo script python come un'app per i flask e quindi aggiungere un'API all'app per i flask e fare in modo che Meteor parli con Python attraverso l'API.

per ottenere questo lavoro di impostazione che ho usato:

di provarlo si può costruire qualcosa di fondamentale come questo (lo script python converte il testo in maiuscolo):

from flask import Flask 
from flask.ext import restful 

app = Flask(__name__) 
api = restful.Api(app) 

class ParseText(restful.Resource): 
    def get(self, text): 
     output = text.upper() 
     return output 

api.add_resource(ParseText, '/<string:text>') 

if __name__ == '__main__': 
    app.run(debug=True) # debug=True is for testing to see if calls are working. 

Quindi in Meteor utilizzare HTTP.get per verificare la chiamata dell'API.

Se si esegue tutto a livello locale poi la chiamata da Meteor sarebbe probabilmente simile a: Meteor.http.get("http://127.0.0.1:5000/test");

+1

ho provato ad usare Meteor e ZeroRPC e non può far altro quest'ultimo installato utilizzando Meteor 1.3 e il comando 'meteora NPM installa --save zerorpc'. Meteor 1.3 utilizza il nodo 0.10.43 che presenta alcuni [problemi] (https://github.com/meteor/meteor/issues/5124) che installano libmsg, una dipendenza di ZeroRPC. Questa soluzione sembra molto più semplice in quanto utilizza un pacchetto Meteor nativo. Grazie! – forgetso

2

In passato ho avuto esperienza nell'implementazione di alcuni simili utilizzando l'approccio RestFul.

Attivando observeChanges da Meteor, l'invio di una richiesta HTTP a Python endpoint riposante API (in Flask) dal server, quindi Flask la gestione delle richieste nel chiamare le pertinenti script Python/funzioni, con la risposta di ritorno, Meteor quindi gestire il callback di conseguenza.

Ci sono naturalmente molti altri approcci che si possono prendere in considerazione, come l'utilizzo di DDP, child_process ecc ho anche pensato di utilizzare python-meteora prima però dopo aver tenuto conto che l'approccio RESTful è più portabile e scalabile (sia nel stessa macchina, o anche in macchine diverse ... puoi espandere i tuoi server per gestire più richieste ecc. ottieni l'idea).

Il caso di utilizzo di tutti è diverso, e ho trovato che RestFul Appoach è la soluzione migliore per il mio caso d'uso. Spero che tu possa trovare la mia risposta utile ed espandere le tue scelte di considerazione e sceglierne una migliore per il tuo caso. In bocca al lupo.