binderhub icon indicating copy to clipboard operation
binderhub copied to clipboard

Open R notebook files with RStudio from launch form

Open ryanlovett opened this issue 6 years ago • 12 comments

@paciorek mentioned in person that it'd be nice to be able to specify the path to R notebook files and have them open with RStudio.

To my knowledge, there's no rsession API call to open files. I'm creating this issue anyways just in case someone can find another way.

Long term this would be a function of #258. Short term, nbrsessionproxy would need to be altered.

ryanlovett avatar Dec 05 '17 23:12 ryanlovett

Also related to: https://github.com/jupyter/repo2docker/issues/24

choldgraf avatar Dec 07 '17 02:12 choldgraf

Sounds like there's no concrete action point here.

manics avatar Sep 20 '21 18:09 manics

I don't know whether this is the right place to ask this - but it really is a significant problem that, at the moment, there is no way to point an RStudio instance at a particular notebook. This means that the user ends up with an RStudio instance running in the root directory of the repository, and they have to manually navigate to find a notebook of interest, and then open it. Where should we ask to see how we can contribute to solving this for repo2docker / RStudio? Ping @stefanv because we're writing a book that needs this ...

matthew-brett avatar Oct 05 '21 18:10 matthew-brett

I think the challenge is that the BinderHub developer community doesn't have a ton of experience with R workflows, particularly RStudio. I think that it would be most-welcome if somebody wants to figure out how to make this happen, I'm sure folks would be happy to review a PR.

I do think this one was closed a bit pre-maturely though. I agree w/ @manics that there wasn't a concrete action point here, but I think the answer to the question "Do we want BinderHub to launch an RStudio session that points to a specific notebook" is "yes", right? If that's the case, I'd be a fan of re-opening and then updating the top comment to reflect the current state of things, in case others are able to help

choldgraf avatar Oct 05 '21 19:10 choldgraf

I don't think anything has changed since the initial report. There is rstudioapi::navigateToFile but I think you can only invoke rstudioapi functions from within RStudio itself. There is a remote function which looks like one can manually specify an IPC communication channel but I don't see where that is documented.

ryanlovett avatar Oct 05 '21 19:10 ryanlovett

Thanks for this. I am thinking of seeing if we can get some help for this from the RStudio developers. Can you say any more what about what we need, and how we can test? I guess there needs to be some way of passing a message to the running RStudio server process to trigger the file open / display in RStudio. Let us say there is such an interface in RStudio server - from where would it be run, within the Binder infrastructure? Please forgive my ignorance.

matthew-brett avatar Oct 06 '21 09:10 matthew-brett

I've reopened this since closing it seems to have encouraged people to take a look 😃.

The main change will have to be in https://github.com/jupyter/repo2docker. All BinderHub does is launch the container built by repo2docker in JupyterHub, and direct the user to a particular URL within that singleuser server.

In other words, can you build a Docker container (you can ignore repo2docker if you want for the purposes of investigation), run it, and open a URL http://<container-ip>:8888/prefix/rstudio/whatever/url/to/redirect that opens your notebook in rstudio? Once you've done that we can look at adding that code/customisations to repo2docker.

The BinderHub change is just a UI change to automatically set the redirect URL, it won't interact with the container.

manics avatar Oct 06 '21 09:10 manics

@matthew-brett jupyter notebook lets you specify a URL of the form /notebooks/filename.ipynb which tells it to open that notebook for you. jupyter lab lets you visit /lab/tree/filename.ipynb. This means that anyone can make a binder URL which just opens a given file at server start. RStudio's web service doesn't seem to have an API like either of these. It does have some sort of per-user or per-project session state but that isn't configurable by the URL or query string arguments.

Binder installs jupyter-rsession-proxy which is the handler for the /rstudio path. This means that if RStudio had an API to tell it to open up specific file, we could invoke that API from jupyter-rsession-proxy, and people could get at it through a jupyter-rsession-proxy API. rstudioapi has a function to open a file, however it seems to only work from inside RStudio itself. The rstudioapi::remote code suggests that if one knew how to seed the environment variables RSTUDIOAPI_IPC_REQUESTS_FILE, RSTUDIOAPI_IPC_RESPONSE_FILE, and RSTUDIOAPI_IPC_SHARED_SECRET, then jupyter-rsession-proxy could invoke R outside of RStudio after having just launched it. So maybe the question for RStudio would be along the lines of, "is this true," and "what are these files and secret".

Maybe someone more familiar with R or RStudio's internals would have better insight.

ryanlovett avatar Oct 07 '21 00:10 ryanlovett

Relevant: https://github.com/jupyterhub/jupyter-rsession-proxy/issues/27

ryanlovett avatar Oct 07 '21 00:10 ryanlovett

@ryanlovett - would you consider posting that question about env vars and the rstudioapi::remote code over at the linked RStudio thrread: https://github.com/rstudio/rstudio/issues/9925 , just for greater visibility? If not, I'm happy to do it.

matthew-brett avatar Oct 07 '21 07:10 matthew-brett

@matthew-brett I just asked.

ryanlovett avatar Oct 07 '21 22:10 ryanlovett

Thanks!

matthew-brett avatar Oct 08 '21 08:10 matthew-brett