jesstme
jesstme

Reputation: 624

Shiny app loading locally, disconnects from server when deployed

My app runs fine locally. I can interact with it, etc. But when deployed globally it immediately throws the "Disconnected from Server" error. I've been googling for days and have tried everything I know how to try.

First things first:

My "Deploy" log in RStudio indicates successful deployment:

Preparing to deploy application...DONE
Uploading bundle for application: 193997...DONE
Deploying bundle: 994423 for application: 193997 ...
Waiting for task: 489405538
  building: Building image: 992534
  building: Fetching packages
  building: Installing packages
  building: Installing files
  building: Pushing image: 992534
  deploying: Starting instances
  rollforward: Activating new instances
  terminating: Stopping old instances
Application successfully deployed to https://jesstme.shinyapps.io/shinynames/
Deployment completed: https://jesstme.shinyapps.io/shinynames/

Link to the app itself: https://jesstme.shinyapps.io/shinynames/

Server code:

#set wd & environment----
setwd("/Users/OldJess/Dropbox/R Stuff (Home)/ShinyNames")

#load packages------
library(datasets)
library(ggplot2)
library(viridis)
library(ggthemes)
library(gridExtra)
library(dplyr)
library(rdrop2)
library(shiny)
library(devtools)

#base <- read.csv("data/NationalNamesBrief.csv", stringsAsFactors = FALSE,     row.names = NULL, na.strings = c("NA","","#MULTIVALUE"))

#temporary df for demonstration purposes
base <- structure(list(Name = c("Ellie", "Ellie", "Ellie", "Ellie", "Ellie", 
                            "Ellie"), 
                   Year = c(1880L, 1881L, 1882L, 1883L, 1883L, 1884L), 
                   Gender = c("F", "F", "F", "F", "M", "F"), 
                   Count = c(17L, 27L, 37L, 24L, 7L, 28L)), 
              .Names = c("Name", "Year", "Gender", "Count"), 
              row.names = c(NA, 6L), class = "data.frame")

#clean data----
base$name <- tolower(base$Name)
base$MF <- as.factor(base$Gender)

#add ranking data by Year
base <- base %>%
  group_by(Year) %>%
  arrange(Year, desc(Count)) %>%
  mutate(Rank = row_number())

#add ranking data by Year AND Gender
base <- base %>%
  group_by(Year, Gender) %>%
  arrange(Year, desc(Count)) %>%
  mutate(GenderRank = row_number())

#create functions----
#function to create line & heat charts
lineHeatCharts <- function(pickaname){
  pickanameLower <- tolower(pickaname)
  subDf <- subset(base[base$name == pickanameLower,])
  heat <- ggplot(subDf, aes(x = Year, y = MF, fill = Count)) +
    scale_fill_viridis(name = "",
                   option = "B", 
                   limits = c(0, max(subDf$Count))) +
    geom_tile(color = "white", size = 0) +
    theme_tufte() +
    theme(axis.text.x = element_text(angle = 90, vjust = 1, hjust = 1),
      axis.ticks.x = element_blank()) +
    scale_x_continuous(breaks = seq(min(subDf$Year), 
                                max(subDf$Year), by = 5)) +
    labs(x = "Year", y = "")
  line <- ggplot(subDf, aes(x = Year, y = Count, fill = MF)) +
geom_line(aes(colour = factor(subDf$Gender)), size = 1.5) +
theme_tufte() +
theme(axis.text.x = element_blank(),
      axis.ticks.x = element_blank()) +
scale_x_continuous(breaks = seq(min(subDf$Year), 
                                max(subDf$Year), by = 5)) +
labs(x = "", y = "", color = "")
  return(grid.arrange(line, heat, 
                  ncol = 1, nrow = 2,
                  heights = c(5, 2), top = max(subDf$Name)))
} 

# Define server logic 
function(input, output) {

  output$view <- renderPlot({
    lineHeatCharts(input$list)
  })
}

UI code:

library(shiny)
library(shinythemes)

# Define UI for dataset viewer application
fluidPage(theme = shinytheme("flatly"),

  # Application title
  titlePanel("First Names on U.S. Social Security Applications, 1880 - 2014"),

  sidebarLayout(
    sidebarPanel(
      textInput(inputId = "list", label = "Enter a name:", value = "Ellie"),

      helpText("Note: This page will take about 30 seconds to load the first     time you open it. Data are from US Social Security applications via data.gov. For privacy, only names with at least 5 babies per year are included. Errors in Social Security form submission, like incorrect sex, are not corrected. Names with special characters and spaces are not included."),

  submitButton("Refresh View")
),

mainPanel(
  h4(""),
  plotOutput("view")
    )
  )
)

Upvotes: 1

Views: 3308

Answers (2)

jesstme
jesstme

Reputation: 624

As it turns out there were two problems: 1) I needed to remove the setwd() 2nd line of my code 2) Shiny logs weren't working.

I posted on Google's Shiny forum, and a RStudio person fixed the issue with the logs. Once the logs were working I saw that the error pointed to my attempts to setwd. Deleted that and the problem was fixed. Keeping this question up because I'm sure this issue will plague someone else at some point.

Upvotes: 1

Pork Chop
Pork Chop

Reputation: 29387

Try this:

#set wd & environment----
#setwd("/Users/OldJess/Dropbox/R Stuff (Home)/ShinyNames")

#load packages------
library(datasets)
library(ggplot2)
library(viridis)
library(ggthemes)
library(gridExtra)
library(dplyr)
library(shiny)
library(shinythemes)

#base <- read.csv("data/NationalNamesBrief.csv", stringsAsFactors = FALSE,     row.names = NULL, na.strings = c("NA","","#MULTIVALUE"))

#temporary df for demonstration purposes
base <- structure(list(Name = c("Ellie", "Ellie", "Ellie", "Ellie", "Ellie", "Ellie"), 
                       Year = c(1880L, 1881L, 1882L, 1883L, 1883L, 1884L), 
                       Gender = c("F", "F", "F", "F", "M", "F"), 
                       Count = c(17L, 27L, 37L, 24L, 7L, 28L)), 
                  .Names = c("Name", "Year", "Gender", "Count"), 
                  row.names = c(NA, 6L), class = "data.frame")

#clean data----
base$name <- tolower(base$Name)
base$MF <- as.factor(base$Gender)

#add ranking data by Year
base <- base %>%
  group_by(Year) %>%
  arrange(Year, desc(Count)) %>%
  mutate(Rank = row_number())

#add ranking data by Year AND Gender
base <- base %>%
  group_by(Year, Gender) %>%
  arrange(Year, desc(Count)) %>%
  mutate(GenderRank = row_number())

#create functions----
#function to create line & heat charts
lineHeatCharts <- function(pickaname){
  pickanameLower <- tolower(pickaname)

  if(!any(base$name %in% pickanameLower)){
    return()
  }

  subDf <- subset(base[base$name == pickanameLower,])
  heat <- ggplot(subDf, aes(x = Year, y = MF, fill = Count)) +
    scale_fill_viridis(name = "",
                       option = "B", 
                       limits = c(0, max(subDf$Count))) +
    geom_tile(color = "white", size = 0) +
    theme_tufte() +
    theme(axis.text.x = element_text(angle = 90, vjust = 1, hjust = 1),
          axis.ticks.x = element_blank()) +
    scale_x_continuous(breaks = seq(min(subDf$Year),  max(subDf$Year), by = 5)) +
    labs(x = "Year", y = "")
  line <- ggplot(subDf, aes(x = Year, y = Count, fill = MF)) +
    geom_line(aes(colour = factor(subDf$Gender)), size = 1.5) +
    theme_tufte() +
    theme(axis.text.x = element_blank(),
          axis.ticks.x = element_blank()) +
    scale_x_continuous(breaks = seq(min(subDf$Year), 
                                    max(subDf$Year), by = 5)) +
    labs(x = "", y = "", color = "")
  return(grid.arrange(line, heat, ncol = 1, nrow = 2, heights = c(5, 2), top = max(subDf$Name)))
} 

ui <- fluidPage(theme = shinytheme("flatly"),

                # Application title
                titlePanel("First Names on U.S. Social Security Applications, 1880 - 2014"),

                sidebarLayout(
                  sidebarPanel(
                    textInput(inputId = "list", label = "Enter a name:", value = "Ellie"),

                    helpText("Note: This page will take about 30 seconds to load the first     time you open it. Data are from US Social Security applications via data.gov. For privacy, only names with at least 5 babies per year are included. Errors in Social Security form submission, like incorrect sex, are not corrected. Names with special characters and spaces are not included."),

                    submitButton("Refresh View")
                  ),
                  mainPanel(
                    h4(""),
                    plotOutput("view")
                  )
                )
)

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

  output$view <- renderPlot({
    lineHeatCharts(input$list)
  })
}

shinyApp(ui, server)

enter image description here

Upvotes: 1

Related Questions