Обновление блестящего приложения на сервере aws при нажатии кнопки обновления в браузере - PullRequest
0 голосов
/ 09 июня 2019

У меня есть мое блестящее приложение на сервере AWS, показанное здесь

 library("shiny")
 library("shinydashboard")
 library("pool")
 library(DBI)
 pool <- dbPool(drv = RMySQL::MySQL(),dbname = "demo",host =     "db.cr7lk1jwjdht.us-east-2.rds.amazonaws.com",username = "kartik",password =     "12345678", port = 3306)

 mychoices = dbGetQuery(pool,"select available_scenario  from   scenario_name;")
  ui <- fluidPage(


  sidebarLayout(
     sidebarPanel(

  actionButton("create_scenario", "Create Scenario"),
    actionButton("load_scenario","load scenario"),
   selectInput('n', "available scenarios", choices = mychoices, multiple =   TRUE),
    verbatimTextOutput("selected")

  ),
  mainPanel(
 uiOutput('tabs'),
 uiOutput("input"),
 uiOutput("inputs"),
 uiOutput("inputss")
     )
   )

   )

  server <- function(input, output,session) {

  observeEvent(input$create_scenario,{

    output$input <- renderUI({
     mainPanel(     
    textInput("txtInput","Enter scenario name"),
    textOutput("sname"),
                  actionButton("save","save_scenario")
   )

})


output$sname <- renderText({
  input$txtInput
})



  observeEvent(input$save,{
  #  conn <- poolCheckout(pool)
  #  dbSendQuery(conn,"insert into scenario (name) values (", output$sname   <- renderText({
     #  input$txtInput
  #}),");")
    dd <- data.frame(x = input$txtInput,row.names = FALSE)
 print(dd)
 dbWriteTable(pool,"available_scenario",dd,append = TRUE)
# values$dd <- rbind(values$dd,data.frame(Enter = input$txtInput))
  })

})

  output$tabs = renderUI({
if(!is.null(input$n)){
  Tabs <- lapply(paste("tab name:", input$n, sep=" "), tabPanel)
  do.call(tabsetPanel, Tabs)}

   })

   observeEvent(input$load_scenario,{

  output$inputs <- renderUI({
  dashboardPage(
    dashboardHeader(title = "Basic dashboard"),
    dashboardSidebar(),
    dashboardBody(
      # Boxes need to be put in a row (or column)
      fluidRow(
        box(plotOutput("plot1", height = 250)),

        box(
          title = "Controls",
          sliderInput("slider", "Number of observations:", 1, 100, 50)
        ))))


} )
histdata <- rnorm(500)
output$plot1 <- renderPlot({
  data <- histdata[seq_len(input$slider)]
  hist(data)
})


 })
   }
     shinyApp(ui, server)

У меня есть таблица базы данных, в которой я храню данные для имени сценария. Когда я создаю сценарий с именем «Сценарий-2» на сервере, он сохраняется в моей таблице базы данных, но когда я обновляю браузер блестящего приложения, он не отражается в доступном сценарии. Чтобы это отразилось в доступном сценарии, я должен перезагрузить сервер. Любые предложения, пожалуйста.

1 Ответ

0 голосов
/ 10 июня 2019

Любой код, который находится за пределами пользовательского интерфейса и сервера, будет запускаться только один раз при первой инициализации R-сессии. Если вы обновляете страницу или кто-то другой заходит в приложение, сеанс R уже существует, так что код больше не будет запускаться. Если вы хотите, чтобы этот код запускался при каждом посещении блестящего URL-адреса приложения, вам нужно поместить этот код в функцию сервера. В вашем коде pool и mychoices определяются вне пользовательского интерфейса и сервера, поэтому вам нужно переместить их (или, по крайней мере, mychoices) в функцию сервера, чтобы они вызывались каждый раз, когда появляется новый блестящий сессия начинается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...