2017-07-28 2 views
1

Ich möchte einen Bokeh-Server verwenden, um meine Handlung und Daten zu erhalten, damit ich meine Bokeh-App in eine Website einbetten kann. Ich versuche, die example auf der 0.12.6 Bokeh Dokumentation gegeben neu:Wie kann man Bokeh-Apps richtig einsetzen, die Server-Callbacks erfordern?

from bokeh.client import push_session 
from bokeh.embed import autoload_server 
from bokeh.plotting import figure, curdoc 

# figure() function auto-adds the figure to curdoc() 
plot = figure() 
plot.circle([1,2], [3,4]) 

session = push_session(curdoc()) 
script = autoload_server(plot, session_id=session.id) 

Ich fange einen Bokeh-Server und Ausführen dieses Python-Programm als solches Also:

bokeh serve --show animated.py 

Der Fehler I Ich sehe so aus:

File "session.py", line 298, in push: 
raise IOError("Cannot push session document because we failed to connect to the server (to start the server, try the 'bokeh serve' command)") Traceback (most recent call last): 
File "/Users/.../anaconda/lib/python3.5/site-packages/bokeh/application/handlers/code_runner.py", line 81, in run 
exec(self._code, module.__dict__) 
File "/Users/.../Documents/.../.../animated.py", line 9, in <module> 
session = push_session(curdoc()) 
File "/Users/.../anaconda/lib/python3.5/site-packages/bokeh/client/session.py", line 86, in push_session 
session.push(document) 
File "/Users/.../anaconda/lib/python3.5/site-packages/bokeh/client/session.py", line 298, in push 
raise IOError("Cannot push session document because we failed to connect to the server (to start the server, try the 'bokeh serve' command)") 
OSError: Cannot push session document because we failed to connect to the server (to start the server, try the 'bokeh serve' command) 

Wie soll ich dieses Problem beheben? Und wenn autoload_server() der völlig falsche Ansatz ist, wie können Sie eine Bokeh-App auf andere Weise bereitstellen?

Antwort

4

Sie werden Ihre Bokeh App wollen wie die Suche:

### contents of app.py 

from bokeh.client import push_session 
from bokeh.embed import server_document 
from bokeh.plotting import figure, curdoc 

plot = figure() 
plot.circle([1,2], [3,4]) 

doc = curdoc() 
doc.add_root(plot) 

Sie finden diese über dienen: (Sie können den Ursprung kwarg nicht brauchen, YMMV)

bokeh serve app.py --allow-websocket-origin="*" 

, dass der Server-Wissen App läuft unter http://localhost:5006/ss (oder was auch immer das Terminal mit der laufenden App sagt), erstellen Sie ein Skript von dort über

laden

Das Sie das Skript in Ihrer Webseite einbetten irgendwie (vielleicht das Skript in eine jinja Vorlage laden), hier ist es Kopie in eine einfache HTML-Vorlage eingefügt:

<!doctype html> 

<html lang="en"> 
<head> </head> 

<body> 
    <script 
     src="http://localhost:5006/ss/autoload.js?bokeh-autoload-element=435ac063-5288-41b9-8375-31907dd5f124&bokeh-app-path=/ss&bokeh-absolute-url=http://localhost:5006/ss" 
     id="435ac063-5288-41b9-8375-31907dd5f124" 
     data-bokeh-model-id="" 
     data-bokeh-doc-id=""></script> 
</body> 
</html> 

den oben html doc öffnen sollte eine Seite mit dem offenen Handlung.

+1

Ich benutzte den falschen autoload_server kwargs. Ich habe seitdem für die Richtigkeit bearbeitet. –

+0

Schnelle Folge: Wenn ich diese App dynamisch auf einer persönlichen Website ausführen lassen möchte, würde ich die Links zu den Bokeh CDNs hinzufügen? Oder wie würde ich das machen? – swetharevanur

+1

Nein, Bokeh Server Apps laden immer automatisch Ressourcen vom Bokeh Server selbst. – bigreddot

Verwandte Themen