Hi All,
I’ve been stuck for a while now trying to get an interactive bokeh plot working with Django. I think I’ve narrowed my issue down a little bit. I was able to run a few of the app and embed examples on my local machine (Ubuntu 16.04), for instance the animated example. However, my Django app is being run in a ve with Vagrant, and in my VE, using the same sequence of commands that worked in my local environment, I get a connection error.
My vagrant file has the following:
Create a forwarded port mapping which allows access to a specific port
within the machine from a port on the host machine. In the example below,
accessing “localhost:8080” will access port 80 on the guest machine.
#config.vm.network “forwarded_port”, guest: 8000, host: 8080
config.vm.network “forwarded_port”, host: 4567, guest: 5006
config.vm.network “forwarded_port”, guest: 8888, host: 8889
Create a private network, which allows host-only access to the machine
using a specific IP.
config.vm.network “private_network”, ip: “192.168.56.10”
The last two ‘forward port’ lines I’ve added trying suggestions from this discussion board and elsewhere.
So from the terminal in my ve (after vagrant up, ssh, source/bin/activate, etc), in the project folder I first run:
bokeh serve --allow-websocket-origin=localhost:8000
And the output is:
2017-08-13 21:38:32,353 Starting Bokeh server version 0.12.6 (running on Tornado 4.5.1)
2017-08-13 21:38:32,357 Starting Bokeh server on port 5006 with applications at paths [‘/’]
2017-08-13 21:38:32,358 Starting Bokeh server with process id: 2235
Then I open a new terminal, ssh into vagrant, activate my ve and navigate to the folder where my example python file is and execute the file:
python bokeh_test.py
The output in the current window is:
To view this example, first start a Bokeh server:
bokeh serve --allow-websocket-origin=localhost:8000
And then load the example into the Bokeh server by
running the script:
python animated.py
in this directory. Finally, start a simple web server
by running:
python -m SimpleHTTPServer (python 2)
or
python -m http.server (python 3)
in this directory. Navigate to
http://localhost:8000/animated.html
And in the bokeh terminal window I see the websocket open:
2017-08-13 21:38:58,300 101 GET /ws?bokeh-protocol-version=1.0&bokeh-session-id=H32hRkfM1BRNMUPjydwAnhl3EJGiYNUKa6VmEGeuTJ9F (127.0.0.1) 0.66ms
2017-08-13 21:38:58,300 WebSocket connection opened
2017-08-13 21:38:58,300 ServerConnection created
Then I open another new terminal window, same steps as above to get into ve, and I run:
python -m http.server
And the output is:
Serving HTTP on 0.0.0.0 port 8000 …
I see that animated.html has been created in the folder, and so I navigate to localhost:8000/animate.html
And in chrome dev tools I see the error:
GET http://localhost:8000/animated.html net::ERR_CONNECTION_REFUSED
Again, this works on my local machine. Any suggestions are greatly appreciated!
Thanks!