@@ -47,17 +47,14 @@ def setup_rserver():
4747 def _get_env (port ):
4848 return dict (USER = getpass .getuser ())
4949
50- def db_config ():
50+ def db_config (db_dir ):
5151 '''
5252 Create a temporary directory to hold rserver's database, and create
5353 the configuration file rserver uses to find the database.
5454
5555 https://docs.rstudio.com/ide/server-pro/latest/database.html
5656 https://github.com/rstudio/rstudio/tree/v1.4.1103/src/cpp/server/db
5757 '''
58- # use mkdtemp() so the directory and its contents don't vanish when
59- # we're out of scope
60- db_dir = tempfile .mkdtemp ()
6158 # create the rserver database config
6259 db_conf = dedent ("""
6360 provider=sqlite
@@ -69,8 +66,18 @@ def db_config():
6966 f .close ()
7067 return db_config_name
7168
69+ def _support_arg (arg ):
70+ ret = subprocess .check_output ([get_rstudio_executable ('rserver' ), '--help' ])
71+ return ret .decode ().find (arg ) != - 1
72+
7273 def _get_cmd (port ):
7374 ntf = tempfile .NamedTemporaryFile ()
75+
76+ # use mkdtemp() so the directory and its contents don't vanish when
77+ # we're out of scope
78+ server_data_dir = tempfile .mkdtemp ()
79+ database_config_file = db_config (server_data_dir )
80+
7481 cmd = [
7582 get_rstudio_executable ('rserver' ),
7683 '--auth-none=1' ,
@@ -79,9 +86,15 @@ def _get_cmd(port):
7986 '--www-verify-user-agent=0' ,
8087 '--secure-cookie-key-file=' + ntf .name ,
8188 '--server-user=' + getpass .getuser (),
82- '--www-root-path={base_url}rstudio/' ,
83- f'--database-config-file={ db_config ()} '
8489 ]
90+ # Support at least v1.2.1335 and up
91+
92+ if _support_arg ('www-root-path' ):
93+ cmd .append ('--www-root-path={base_url}rstudio/' )
94+ if _support_arg ('server-data-dir' ):
95+ cmd .append (f'--server-data-dir={ server_data_dir } ' )
96+ if _support_arg ('database-config-file' ):
97+ cmd .append (f'--database-config-file={ database_config_file } ' )
8598
8699 return cmd
87100
0 commit comments