2016-07-17 102 views
6

Sto tentando di fornire una cifra interattiva bokeh tramite heroku. La figura che sto cercando di avere è essenzialmente equivalente a questa (example, code). Sono nuovo sia per lo bokeh sia per lo heroku quindi sono quasi certo che mi manca qualcosa di piuttosto semplice - penso che quello che sto cercando di fare dovrebbe essere abbastanza semplice.Visualizzazione di figura del bokeh interattiva su heroku

In primo luogo, posso servire la mia figura localmente usando il comando bokeh serve --show myapp. Dove myapp è il nome del modulo python che include la figura bokeh. Notare che il flag --show richiede solo bokeh di aprire una finestra del browser una volta che la figura è stata creata e il server è in esecuzione.

Successivamente, ho impostato un account heroku e ho creato la mia prima app, seguendo i passaggi nello Heroku - Getting Started With Python tutorial. Il mio repository git include myapp, un file requirements.txt e Procfile.

Ahimè, qualcosa non funziona e sono perplesso. Ho provato un sacco di opzioni diverse nel mio Procfile e nessuno ha funzionato. Poiché il comando bokeh serve ... avvia un server, non dovrebbe un Profile che assomiglia a questo fare il trucco:

web: bokeh serve --port $PORT myapp 
Nel caso che il lavoro

? Forse mi manca qualcosa e ho bisogno di creare un'applicazione flask che avvolge la mia app bokeh ma, per quanto posso dire, non sembra necessario. Forse qualcuno conosce un bel tutorial che riunisce tutti questi passaggi insieme, non ne ho ancora trovato uno completo.

Aggiornamento: Sto incollando un po 'dei miei heroku tronchi di seguito. Come gestisci questo problema --host whitelist?

2016-07-17T05:00:46.513139+00:00 heroku[slug-compiler]: Slug compilation started 
2016-07-17T05:00:46.366909+00:00 heroku[api]: Deploy 9b63d8a by [email protected] 
2016-07-17T05:00:46.367087+00:00 heroku[api]: Release v4 created by [email protected] 
2016-07-17T05:00:46.624937+00:00 heroku[web.1]: State changed from crashed to starting 
2016-07-17T05:00:55.188978+00:00 heroku[web.1]: Starting process with command `bokeh serve --port=39665 myapp.py` 
2016-07-17T05:00:57.876287+00:00 app[web.1]: 2016-07-17 05:00:57,876 Starting Bokeh server on port 39665 with applications at paths ['/myapp'] 
2016-07-17T05:00:57.868758+00:00 app[web.1]: 2016-07-17 05:00:57,868 Starting Bokeh server version 0.12.0 
2016-07-17T05:00:57.876378+00:00 app[web.1]: 2016-07-17 05:00:57,876 Starting Bokeh server with process id: 3 
2016-07-17T05:00:58.800309+00:00 heroku[web.1]: State changed from starting to up 
2016-07-17T05:00:59.970326+00:00 app[web.1]: 2016-07-17 05:00:59,970 Rejected connection from host 'myapp.herokuapp.com' because it is not in the --host whitelist 
2016-07-17T05:00:59.973495+00:00 app[web.1]: 2016-07-17 05:00:59,970 403 GET/(XX.XX.XXX.XX) 1.29ms 
2016-07-17T05:00:59.975282+00:00 heroku[router]: at=info method=GET path="/" host=myapp.herokuapp.com request_id=xxxxxxxxxxxxx fwd="XX.XX.XX.XX" dyno=web.1 connect=1ms service=4ms status=403 bytes=219 

risposta

8

Sto solo andando a rispondere alla mia domanda da quando ero finalmente in grado di arrivare a questo lavoro e nessun altro ha risposto ancora.

ho finito con un Procfile che si presentava così:

web: bokeh serve --port=$PORT --host=myapp.herokuapp.com --host=* \ 
    --address=0.0.0.0 --use-xheaders myapp.py 

un po 'di background su ciò che tutti questi argomenti significa (per quanto posso dire):

--port: specifica il porta che il server bokeh ascolterà su, $PORT è impostata dal heroku

--host=myapp.herokuapp.com e --host=*: specificare il nome host come myapp.heroku..., il jolly dovrebbe consentire l'accettazione di tutti gli host. Non sono più sicuro che sia necessario.

--address=0.0.0.0: Penso che questo dica a bokeh di capire da solo, quale indirizzo IP sarà acceso.

--use-xheaders: provoca bokeh per ignorare l'IP remoto e schema URI/protocollo

Sono felice di apportare modifiche a questo o accettare una più consapevoli gli utenti rispondono se ci sono problemi con questo approccio.

+0

Sei riuscito a disporlo con il pallone? Ho localmente un'applicazione di una fiaschetta funzionante, ma non riesco a capire come farlo funzionare su Heroku. Ecco [bokeh_plot.py] (https://www.dropbox.com/s/ohaa388wpmkvpxt/bokeh_plot.py?dl=0) e [app.py] (https://www.dropbox.com/s/ owla19e58hgijgd/app.py? dl = 0) contenente il codice del pallone. Script app.py contiene un sottoprocesso in cui è avviato il server bokeh in modo che l'applicazione possa essere avviata semplicemente eseguendo 'python app.py' e l'app sia resa correttamente in localhost: 5000. Ora, non so come modificare bokeh_subprocess per farlo funzionare su Heroku. – multigoodverse

+0

Non ho mai avuto un'app che funziona con il mio setup. Ho appena usato il comando 'bokeh serve' ed è stato possibile saltare il passaggio' flask'. – jhamman

+0

Vedo, ma è necessario un framework web se è necessario aggiungere altri contenuti lungo il grafico bokeh, giusto? – multigoodverse

Problemi correlati