I have a setup with an RStudio Workbench and Connect server, where I want to automatically publish content to Connect.
When I connect to the connect server manually (clicking the blue share button, authenticating etc, and then publishing the content) I can then programmatically re-publish/update my app like this
deployApp(
appDir = app_dir, # app/
appName = app_name, # test-app
appId = app_id, # 123 as noted from the manual step; app already exists with this ID
account = RSCONNECT_USER, # myuser
launch.browser = FALSE,
forceUpdate = TRUE,
server = RSCONNECT_SERVER # the connect-server address
)
#> Preparing to deploy application...DONE
#> Uploading bundle for application: 123...DONE
#> Deploying bundle: xyz for application: 123 ...
#> ...
#> Application successfully deployed to https://myconnect-server.com/content/...
However, I eventually want to run this in a CICD job, therefore I cannot manually create the account/connection to the Connect server, instead I want to connect using an API key using the connectApiUser() function.
But when I try the following I get an error on the deployApp() call:
# not real info ofc
RSCONNECT_USER <- "myuser"
RSCONNECT_SERVER <- "myconnect-server.com"
APIKEY <- "mysecret (working!) API-Key"
app_id <- "123"
app_name <- "test-app"
app_folder <- "app"
library(rsconnect)
packageVersion("rsconnect") # latest version as of 2023-06-28
#> [1] ‘0.8.29’
## 1 connect to the server and add user ====
removeServer(RSCONNECT_SERVER)
#> Warning... The server 'myconnect-server.com' is not currently registered
addServer(paste0("https://", RSCONNECT_SERVER), RSCONNECT_SERVER)
#> Server 'myconnect-server.com' added successfully: https://myconnect-server.com
# Note the error is expected as the user is not yet registered.
removeAccount(RSCONNECT_USER)
#> Error... account named 'myuser' does not exist
connectApiUser(
account = RSCONNECT_USER,
server = RSCONNECT_SERVER,
apiKey = APIKEY
)
#> Account registered successfully: myuser
## 2 check connections ====
servers()[, c("name", "url")]
#> name url
#> 1 myconnect-server.com https://myconnect-server.com
#> 2 shinyapps.io https://api.shinyapps.io/v1
#> 3 posit.cloud https://api.shinyapps.io/v1
accounts()
#> name server
#> 1 myuser myconnect-server.com
## 3 Deploy to the server ====
deployApp(
appDir = app_folder,
appName = app_name,
appId = app_id,
account = RSCONNECT_USER,
launch.browser = FALSE,
forceUpdate = TRUE,
server = RSCONNECT_SERVER
)
#> Preparing to deploy application...Error: HTTP 404
#> GET https://myconnect-server.com/applications/123
#> 404 page not found
Am I understanding the way rsconnect want to use connectApiUser() wrongly or why does this not work?
Note that this official bash script does not work for me as I need more flexibility than the script provides, therefore I want to use the rsconnect package as outlined above.
Update I opened an issue with rsconnect.
As mentioned in the GitHub Issue, the solution was to specify the server URL slightly differently.
Instead of using
(which resulted in the error), using the following solved the issue: