闪亮的应用程序显示" undefined",重新加载时出现UI

时间:2018-03-30 19:35:48

标签: r docker shiny

我有一个相当复杂的闪亮应用程序,可以在本地成功运行。 以前它也成功停靠,并通过shinyproxy在VirtualBox VM(Debian x64)中运行正常。

随着最后一个docker图像的重新构建,应用程序无法正常运行,容器运行,日志文件显示应用程序启动, 然而,没有用户界面,只是' undefined'在浏览器中。在浏览器中重新加载后,将显示应用程序UI。

为了便于排查我已经用小型demo-app替换了我复杂的应用程序,使Dockerfile保持不变, 在我复杂的应用程序库中使用了很多。

demo-app由server.R,ui.R和global.R

组成

我有同样奇怪的结果:' undefined'而不是用户界面,应用程序会在重新加载后显示。

如果我将所有库移动到server.R并删除global.R,那么问题就解决了,应用程序UI会立即出现。

这是我的Dockerfile:

# Ubuntu 16.04 LTS with R
FROM openanalytics/r-base 

# system libraries of general use
RUN apt-get update && apt-get install -y \
    sudo \
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    libssl-dev \
    libssh2-1-dev \
    libssl1.0.0 \
    libxml2-dev \
    libpq-dev \
    libgdal-dev \
    libproj-dev


RUN R -e "install.packages(c('remotes', 'RPostgreSQL', 'stringi', 'shiny', 
'shinydashboard',  'shinyjs', 'leaflet', 'plyr', 'dplyr', 'data.table', 
'scales', 'rgdal', 'sp', 'shinyBS', 'devtools','DT','rgeos','shinyjqui'), 
repos='https://cloud.r-project.org/')"
RUN installGithub.r hadley/ggplot2

RUN R -e "install.packages(c('tidyr', 'hexbin', 'purrr'), 
repos='https://cloud.r-project.org/')"
RUN installGithub.r ropensci/plotly 
RUN rm -rf /tmp/downloaded_packages/


RUN apt-get update && apt-get install -y \
    default-jre \
    default-jdk \
    libv8-3.14-dev

RUN R -e "install.packages(c('rhandsontable', 'V8'), repos='https://cloud.r-
project.org/')"

RUN apt-get update && apt-get install -y \
    r-cran-rjava

RUN R -e "install.packages(c('rJava', 'xlsxjars'), repos='https://cloud.r-
project.org/')"
RUN R -e "install.packages(c('xlsx'), repos='https://cloud.r-project.org/')"

RUN installGithub.r jrowen/rhandsontable
RUN installGithub.r dreamRs/shinyWidgets
RUN rm -rf /tmp/downloaded_packages/


RUN mkdir /root/test_app2
COPY test_app2 /root/test_app2

COPY Rprofile.site /usr/lib/R/etc/

EXPOSE 3838

CMD ["R", "-e shiny::runApp('/root/test_app2')"]

server.R

    server <- function(input, output) {

      datasetInput <- reactive({
        switch(input$dataset,
               "rock" = rock,
               "pressure" = pressure,
               "cars" = cars)
      })

      output$summary <- renderPrint({
        dataset <- datasetInput()
        summary(dataset)
      })

  output$view <- renderTable({
    head(datasetInput(), n = input$obs)
  })

}

ui.R

ui <- fluidPage(

  titlePanel("Shiny Text"),

  sidebarLayout(

    sidebarPanel(

      selectInput(inputId = "dataset",
                  label = "Choose a dataset:",
                  choices = c("rock", "pressure", "cars")),

      numericInput(inputId = "obs",
                   label = "Number of observations to view:",
                   value = 10)
    ),

    mainPanel(
      verbatimTextOutput("summary"),
      tableOutput("view")

    )
  )
)

global.R

library(RPostgreSQL)
library(stringi)
library(shiny)
library(shinydashboard)
library(shinyjs)
library(leaflet)
library(plyr)
library(dplyr)
library(data.table)
library(ggplot2)
library(plotly)
library(scales)
library(rgdal)
library(sp)
library(shinyBS)
library(rhandsontable)
library(xlsx)
library(shinyWidgets)
library(reshape2)
library(tools)
library(DT)

有人可以帮忙吗?

更新:最小化Dockerfile并遇到同样的问题:

FROM openanalytics/r-base 

RUN apt-get update && apt-get install -y \
    sudo \
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    libssl-dev \
    libssh2-1-dev \
    libssl1.0.0 \
    libxml2-dev \
    libpq-dev \
    libgdal-dev \
    libproj-dev

RUN R -e "install.packages(c( 'shiny','dplyr'), repos='https://cloud.r-project.org/')"

RUN rm -rf /tmp/downloaded_packages/

RUN apt-get update && apt-get install -y \
    default-jre \
    default-jdk \
    libv8-3.14-dev

RUN apt-get update && apt-get install -y \
    r-cran-rjava

RUN R -e "install.packages(c('rJava', 'xlsxjars'), repos='https://cloud.r-project.org/')"
RUN R -e "install.packages(c('xlsx'), repos='https://cloud.r-project.org/')"

RUN rm -rf /tmp/downloaded_packages/

RUN mkdir /root/test_app2
COPY test_app2 /root/test_app2

COPY Rprofile.site /usr/lib/R/etc/

EXPOSE 3838

CMD ["R", "-e shiny::runApp('/root/test_app2')"]

只有三个库 - shiny, xlsx, dplyr - 会产生相同的'undefined'结果。但是只有在构建之后运行的第一个容器上运行才能运行(登录/注销,重启docker服务和shinyproxy服务)。组合shiny & xlsxshiny & dplyr不会产生'undefined'

1 个答案:

答案 0 :(得分:0)

非常感谢@Ralf Stubner提出的将问题缩小到最小化的想法。

在我的帖子更新中,有一个最小的Dockerfile可以重现问题。但是,这个问题仅存在于VirtualBox VM中,一切运行正常(使用简化的示例应用程序和我的复杂应用程序)在AWS上。因此,在VirtualBox VM中构建Shiny App的Docker镜像存在一个问题 - 现在问题相当不同。