When someone lands on a page, www.mysite.com/update, for example I need to extract values from the URL and send these values to a Shiny App.
What I have works in R Studio but fails when placed in /srv/shiny-server/update. The error is:
An error has occurred! Can't call
runApp()
from withinrunApp()
. If your application code containsrunApp()
, please remove it.
I understand that you can't call a Shiny app from a Shiny app. But I thought when I do stopApp(tmp)
the first Shiny app I call stops so that I can call the next one.
How can I get this to work when it's "live"?
R Script 1 - app.R that resides at /srv/shiny-server/update
source("call_shiny_as_f.R")
source("shiny_get_from_url_f.R")
email <- url_values[[1]]
wb_id <- url_values[[2]]
shiny_as_f(email, wb_id)
# Sample URL parameters
# ?email=example@gmail.com&wb_id=dfg45650
Shiny App 1 - shiny_get_from_url_f.R
# Get values from URL
library("tidyverse")
library("shiny")
url_values <- runApp(list(
ui = fluidPage(
),
server = function(input, output, session) {
observe({
query <- parseQueryString(session$clientData$url_search)
email <- query[['email']]
email <- str_replace(email, " " , "+")
wb_id <- query[['wb_id']]
if (!is.null(email) & !is.null(wb_id)){
tmp <- list(email, wb_id)
stopApp(tmp)
}
})
}
))
Shiny App 2 - call_shiny_as_f.R
# Shiny app as function that displays variables
library(shiny)
shiny_as_f <- function(x, y){
app=shinyApp(
ui <- fluidPage(
textOutput("value_1"),
textOutput("value_2")
),
server <- function(input, output, session) {
output$value_1 <- renderText({ x })
output$value_2 <- renderText({ y })
}
)
shinyApp(ui, server)