Is there a way to have a Dash.jl application running while at the same time being able to use the REPL interactively?
Very stupid reply from me. HAve you looked at Pluto notebooks?
Thank you for the suggestion. I have no experience with Pluto. Can one mix buttons and PlotlyJs graphs?
Is your problem that Dash’s
run_server function blocks the REPL which you start it from?
In that case it should be as simple as adding an
@async run_server(app, "0.0.0.0", 8080)
This is what I tried already and got the following warning.
julia> @async run_server(app, "0.0.0.0", debug=true) ┌ Warning: Hot reloading is disabled for interactive sessions. Please run your app using julia from the command line to take advantage of this feature. └ @ Dash C:\Users\michele.zaffalon\.julia\packages\Dash\66VCI\src\server.jl:60 Task (runnable) @0x0000000057e64650[ Info: Listening on: 0.0.0.0:8050
I thought I was not using the command correctly, but now that I re-read it, I see that only the hot reloading of the Dash application is disabled.
You can, do you want it for yourself or you want to distribute it?
It is a control tool for hardware that has a long intrinsic time constant. My worry is that if I start and I get a parameter wrong, I wouldn’t be able to inspect its status.
debug=false Dash.jl dev mode works great, but having to run it outside the REPL means we can’t use
Infiltrator.jl among other things.
So, starting from
# e.g. in MyDashApp/src/MyDashApp.jl module MyDashApp using Dash function makeapp() app = dash() app.layout = #= =# callback!(app, #= =#) # ... return app end end # module
I was able to get something working with
# watch.jl using Revise using Dash, Dash.HTTP, Dash.Sockets using MyDashApp const host = "127.0.0.1" const port = 9002 # mostly taken from # https://github.com/plotly/Dash.jl/blob/bba2bcb8765935d5aa86660992edf275b163a741/src/server.jl#L52-L57 function start_server(app) handler = Dash.make_handler(app) server = Sockets.listen(Dash.get_inetaddr(host, port)) task = @async HTTP.serve(handler, host, port; server, verbose=true) return server, task end function watch() function go() app = MyDashApp.makeapp() Dash.enable_dev_tools!(app, debug=true) return start_server(app) end server = go() Revise.entr(, [MyDashApp]; postpone=true) do close(server) server = go() end end
julia> include("watch.jl"); @async watch()
appears to work.