Shiny Dashboard App Deployment Issue "ERROR: An error has occurred. Check your logs or contact the app author for clarification."

I have been trying to publish my shiny dashboard app on shinnyapps.io server. However, even though the app is working locally, I cannot seem to get any success in publishing it online. It gives me this error.

ERROR: An error has occurred. Check your logs or contact the app author for clarification.

I am running a Windows 10 64 bits machine.

My server.r is as follows

library(shiny)
library(shinydashboard)
library(tidyverse)
library(lubridate)
library(plotly)
library(shinyWidgets)
library(DT)

df <- read.csv("student_data.csv")

df <- df %>%
 mutate(dov = ymd(date_of_visit))

## Value1: Total Schools Covered
tot.school <- df %>% distinct(school) %>% nrow()

## Value2: Total Sudents Present
tot.present <- df %>% filter(student_present == "Present") %>% count()

## Value3: Total Enrolment
tot.enrolment <- df %>% filter(currently_enrolled != "No: Dropped out" & currently_enrolled != "") %>% nrow()

## Value4: Photo Mismatch  
photo.mismatch <- df %>% filter(verified_by_photo == "Mismatched photo") %>% count()

## Value5: Average enrolment by cohort C
avg.enrol <- df %>%
  filter(currently_enrolled != "No: Dropped out" & currently_enrolled != "") %>%
  group_by(school) %>%
  mutate(schl_enrol = n()) %>%
  group_by(cohort) %>%
  summarise(mean = mean(schl_enrol))

avg.enrol.C <- pull(subset(avg.enrol, cohort == "C")[,2])

## Value6: Average enrolment by cohort D
avg.enrol.D <- pull(subset(avg.enrol, cohort == "D")[,2])
  
############ ------------------------------------------ ############
shinyServer(function(input,output){
  
## Value1: Total Schools Covered ## 
  output$value1 <- renderValueBox({
    valueBox(
      formatC(tot.school, format="d", big.mark=','),
      paste('Total Schools :',tot.school),
      icon = icon("school",lib='font-awesome'),
      color = "purple") 
  })

## Value2: Total Sudents Present ##
  output$value2 <- renderValueBox({
    valueBox(
      formatC(tot.present$n[1], format="d", big.mark=','),
      paste('Total Present Students :',tot.present$n[1]),
      icon = icon("user-graduate",lib='font-awesome'),
      color = "green") 
  })

## Value3: Total Enrolment ##
  output$value3 <- renderValueBox({
    valueBox(
      formatC(tot.enrolment, format="d", big.mark=','),
      paste('Total Enrolled Students :',tot.enrolment),
      icon = icon("graduation-cap",lib='font-awesome'),
      color = "yellow")
  })
  
## Value4: Total Photo Mismatches ##  
  output$value4 <- renderValueBox({
    valueBox(
      formatC(photo.mismatch$n[1], format="d", big.mark=','),
      paste('Total Photo Mismatches :',photo.mismatch$n[1]),
      icon = icon("camera-retro",lib='font-awesome'),
      color = "purple")
  })

## Value5: Average enrolment in Cohort C ##
  output$value5 <- renderValueBox({
    valueBox(
      formatC(avg.enrol.C, big.mark=','),
      paste('Average Enrolment in Cohort C :', round(avg.enrol.C,2)),
      icon = icon("graduation-cap",lib='font-awesome'),
      color = "green")
  })

## Value6: Average enrolment in Cohort D ##
  output$value6 <- renderValueBox({
    valueBox(
      formatC(avg.enrol.D, big.mark=','),
      paste('Average Enrolment in Cohort D :', round(avg.enrol.D, 2)),
      icon = icon("address-card",lib='font-awesome'),
      color = "yellow")
  })
  
  output$histogram <- renderPlotly({
      p <- df %>%
          filter(district == input$dist & (cohort == "C" | cohort == "D")) %>%
          ggplot() + geom_bar(aes(dov)) + facet_wrap(~ cohort, nrow = 1)
      print(p)

  })
  
  output$mismatch <- renderPlotly({
    
    p1 <- df %>%
      filter(verified_by_photo != "") %>%
      ggplot() + geom_bar(aes(district, fill = verified_by_photo), position = "dodge")
    print(p1)
  })
  
  output$absent <- renderPlotly({
    
    p2 <- df %>%
      filter(student_present != "") %>%
      ggplot() + geom_bar(aes(district, fill = student_present), position = "dodge")
    print(p2)
  })
  
  output$etable <- DT::renderDataTable({
    df %>%
      group_by(district) %>%
      summarise(
        Minimum  = min(school),
        Maxmimum = max(school),
        Mean     = mean(school)
      )
  })
}
)

My ui.r is below

library(shiny)
library(shinydashboard)
library(tidyverse)
library(lubridate)
library(plotly)
library(shinyWidgets)
library(DT)

shinyUI(
  dashboardPage(
    dashboardHeader(title = "SENSA Dashboard",
                    tags$li(a(img(src = 'logo.jpg',
                                  title = "Company Home", height = "30px"),
                              style = "padding-top:10px; padding-bottom:10px;"),
                            class = "dropdown")),
    
    dashboardSidebar(
      # sliderInput("bins","Number of Breaks",1,100,50),
      # selectInput("dist",
      #             shiny::HTML("<p><span style='color: black'>Names of District </span></p>"),
      #             choices = c("Select District", levels(df$DISTRICT))),
      pickerInput("dist",
                  shiny::HTML("<p><span style='color: black'>Names of District </span></p>"),
                  choices=levels(df$district),
                  options = list(`actions-box` = TRUE),multiple = T,
                  selected = levels(df$district)),
      sidebarMenu(
      menuItem("Main Dashboard", tabName = "main",
               icon = icon("tachometer")),
      menuItem("Student Information", tabName = "student",
               icon = icon("user-graduate")),
      menuItem("Enumerators Information", tabName = "enum",
               icon = icon("chalkboard-teacher"))
    )),
    dashboardBody(
      tags$head(tags$style(HTML('
                                /* logo */
                                .skin-blue .main-header .logo {
                                background-color: #002147;
                                }

                                /* navbar (rest of the header) */
                                .skin-blue .main-header .navbar {
                                background-color: #002147;
                                }
                                /* body */
                                .content-wrapper, .right-side {
                                background-color: #ffffff;
                                }

                                /* main sidebar */
                                .skin-blue .main-sidebar {
                                background-color: #A6A6A6;
                                }
 
                                /* other links in the sidebarmenu */
                                .skin-blue .main-sidebar a{
                                background-color: #A6A6A6;
                                color: #000000;
                                font-weight: bold;
                                }

                                /* Hovered side bar*/
                                .skin-blue .main-sidebar .sidebar .sidebar-menu a:hover{
                                background-color: #002147;
                                }

                                /* Active sidebar */
                                .skin-blue .main-sidebar .sidebar .sidebar-menu .active a{
                                background-color: #002147;
                                color: #ffffff;
                                }
                                '))),
      tabItems(
        tabItem(tabName = "main",
                ##########################
                # First row with numbers #
                ##########################
                fluidRow(
                  valueBoxOutput("value1"),
                  valueBoxOutput("value2"),
                  valueBoxOutput("value3")
                ),
                ##########################
                # Second row with graphs #
                ##########################
                fluidRow(
                  column(12,
                         plotlyOutput("histogram"))
                )
                ),
        tabItem(tabName = "student",
                ##########################
                # First row with numbers #
                ##########################
                fluidRow(
                  valueBoxOutput("value4"),
                  valueBoxOutput("value5"),
                  valueBoxOutput("value6")
                ),
                ##########################
                # Second row with graphs #
                ##########################
                fluidRow(
                  column(6,
                         plotlyOutput("mismatch")),
                  column(6,
                         plotlyOutput("absent"))
                )
        ),
        tabItem(tabName = "enum",
                h1("Enumerators Information"),
                fluidRow(
                  column(6,DT::dataTableOutput("etable"))
                )
                   )
      )

  )
  )
)

The Logs from the server are below

2019-02-16T10:49:20.011176+00:00 shinyapps[718614]: Using jsonlite for JSON processing
2019-02-16T10:49:20.016162+00:00 shinyapps[718614]: 
2019-02-16T10:49:20.016164+00:00 shinyapps[718614]: Starting R with process ID: '20'
2019-02-16T10:49:20.040355+00:00 shinyapps[718614]: 
2019-02-16T10:49:20.040358+00:00 shinyapps[718614]: Listening on http://127.0.0.1:32854
2019-02-16T10:49:27.148837+00:00 shinyapps[718614]: 
2019-02-16T10:49:27.148842+00:00 shinyapps[718614]: 
2019-02-16T10:49:27.148840+00:00 shinyapps[718614]: Attaching package: ‘shinydashboard’
2019-02-16T10:49:27.149630+00:00 shinyapps[718614]: The following object is masked from ‘package:graphics’:
2019-02-16T10:49:27.149633+00:00 shinyapps[718614]: 
2019-02-16T10:49:27.149636+00:00 shinyapps[718614]: 
2019-02-16T10:49:27.149634+00:00 shinyapps[718614]:     box
2019-02-16T10:49:27.792023+00:00 shinyapps[718614]: ── Attaching packages ─────────────────────────────────────── tidyverse 1.2.1 ──
2019-02-16T10:49:27.797373+00:00 shinyapps[718614]: ✔ ggplot2 3.1.0     ✔ purrr   0.3.0
2019-02-16T10:49:27.903624+00:00 shinyapps[718614]: The following object is masked from ‘package:base’:
2019-02-16T10:49:27.797375+00:00 shinyapps[718614]: ✔ tibble  2.0.1     ✔ dplyr   0.7.8
2019-02-16T10:49:27.797376+00:00 shinyapps[718614]: ✔ tidyr   0.8.2     ✔ stringr 1.4.0
2019-02-16T10:49:27.895297+00:00 shinyapps[718614]: ✖ dplyr::filter() masks stats::filter()
2019-02-16T10:49:27.903628+00:00 shinyapps[718614]: 
2019-02-16T10:49:27.797378+00:00 shinyapps[718614]: ✔ readr   1.3.1     ✔ forcats 0.3.0
2019-02-16T10:49:27.903627+00:00 shinyapps[718614]:     date
2019-02-16T10:49:27.895294+00:00 shinyapps[718614]: ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
2019-02-16T10:49:27.895298+00:00 shinyapps[718614]: ✖ dplyr::lag()    masks stats::lag()
2019-02-16T10:49:27.903625+00:00 shinyapps[718614]: 
2019-02-16T10:49:27.903170+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.001805+00:00 shinyapps[718614]: Attaching package: ‘plotly’
2019-02-16T10:49:27.903172+00:00 shinyapps[718614]: Attaching package: ‘lubridate’
2019-02-16T10:49:28.001801+00:00 shinyapps[718614]: 
2019-02-16T10:49:27.903173+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.001806+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.002240+00:00 shinyapps[718614]: The following object is masked from ‘package:ggplot2’:
2019-02-16T10:49:28.002242+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.002244+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.002243+00:00 shinyapps[718614]:     last_plot
2019-02-16T10:49:28.002794+00:00 shinyapps[718614]: The following object is masked from ‘package:stats’:
2019-02-16T10:49:28.002796+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.002797+00:00 shinyapps[718614]:     filter
2019-02-16T10:49:28.002798+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.003459+00:00 shinyapps[718614]: The following object is masked from ‘package:graphics’:
2019-02-16T10:49:28.003461+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.003462+00:00 shinyapps[718614]:     layout
2019-02-16T10:49:28.003463+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.046480+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.046482+00:00 shinyapps[718614]: Attaching package: ‘DT’
2019-02-16T10:49:28.046483+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.047089+00:00 shinyapps[718614]: The following objects are masked from ‘package:shiny’:
2019-02-16T10:49:28.047091+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.047093+00:00 shinyapps[718614]:     dataTableOutput, renderDataTable
2019-02-16T10:49:28.047094+00:00 shinyapps[718614]: 
2019-02-16T10:49:28.051763+00:00 shinyapps[718614]: Warning: Error in $: object of type 'closure' is not subsettable
2019-02-16T10:49:28.055635+00:00 shinyapps[718614]:   71: levels

Please suggest a solution.

Best,

The error means that the deployment went ok but there is a problem in launching your app. Can you check for levels calls ? Maybe line 71 as indicated ?

This type of error should happen locally, but you need to be sure to test your app in a clean environment.

  • New R session
  • No .Rdata loaded (nothing in the global environment before running the app)

The application runs in a clean session on the server and there is something off. Nothing obvious I have seen in your code.

This topic was automatically closed 54 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.