2017-12-13 30 views
0

Shiny-Server에서 실행할 때 R Shiny DataTable의 큰 테이블에 문제가 있습니다. 렌더링 후에 페이지가 "다시 연결하려고 시도 중"으로 깜박 인 다음 결국 시간 초과되어 연결이 끊어집니다. 이 문제는 Shiny-Server에 게시 할 때 발생하지만 shiny::runApp()으로 로컬에서 시작할 때 발생합니다.Shiny DataTable은 Shiny-Server의 대용량 테이블에 대한 연결을 잃었지만 로컬 RunApp에서는 연결이 끊어졌습니다.

결과가 3 열인 500,000 개의 레코드를 테스트하면 문제가 발생합니다. 작은 테이블에서는 잘 작동합니다.

DT:: 패키지로 문제를 격리했습니다. dataTableOutputrenderDataTableshiny::을 사용하면 정상적으로 작동합니다. 그러나 DT가 제공하는 모든 유용한 기능을 놓치고 있습니다. 문제가 발생하면 DataTable의 필터링 메커니즘이 여전히 작동하고 서버에서 처리되지만 다른 반짝이는 기능은 작동하지 않습니다.

library(shiny) 

df <- data.frame(num = rep(c(1,2,3,4,5,6,7,8,9,0), times=50000), 
       letters = rep(letters[1:10], times=50000), 
       colA = rep(c("apple","orange","pear","grape","onion"), times=100000)) 

ui <- navbarPage("DataTable test", id="nav", 

       tabPanel("Define Subset", 
          # Present Datatable 
          fluidRow(DT::dataTableOutput("mdu_subset_table"), style = "font-size: 85%; width: 100%") 
       ), 
       tags$head(
        includeCSS("styles.css") 
       ) 

) 


server <- function(input, output, session) { 
    # session$allowReconnect(TRUE) 

    output$mdu_subset_table <- DT::renderDataTable(
    {df} 
    , filter="top" 
    , options = list(sDom = '<"top">lrt<"bottom">ip', 
        lengthMenu = c(100,1000) 
        ) 
) 
} 

shinyApp(ui, server) 

반짝 서버에 R 버전은 다음과 같습니다 : - "하나의 촛불"

R 버전 3.4.1 (2017년 6월 30일)

아래 코드는 오류를 재현 할 수 있습니다 로컬 및 반짝이는 서버에 설치된 라이브러리는 동일합니다.

오류가 반짝 서버의 R 콘솔 로그에 표시되지 않습니다 다음 output$mdu_subset_table 귀하의 질문에 불완전

su: ignore --preserve-environment, it's mutually exclusive to --login. 

Listening on http://127.0.0.1:43761 
~                  
~        
~ 
~ 
~ 
+0

, 내 첫번째 생각은 테이블에 * 서버 측 * 처리를 사용하는 것입니다. [here] (http://rstudio.github.io/DT/server.html)를 보면, render 문에'server = TRUE'를 추가하는 것만 큼 간단 할 수 있습니다. 그러나 이는 네트워크 대기 시간이나 관련성을 제시하기 때문에 실제로 문제가 해결되거나되지 않을 수도 있습니다. –

+0

Thanks @KevinArseneau. 서버 측 처리는 기본적으로 사용되며이 예제에서 사용되고 있습니다. 클라이언트 측 처리를 사용하면 테이블에 대한 직접적인 오류 메시지가 너무 커집니다. –

답변

0

DT::datatable에는 전화가 없다.

아래 코드로 해당 블록을 교체하면됩니다. 더 많은 것을 모른 채

output$mdu_subset_table <- DT::renderDataTable({ 

    DT::datatable(
    df, 
    filter = "top", 
    options = list(
     dom = "lrtip", 
     lengthMenu = c(100, 1000) 
    ) 
) 

}, server = TRUE) 

N.B. In your question you include sDom within the options list. I've not seen that used elsewhere and have replaced with a standard dom entry.

+0

감사합니다. 나는 당신의 수정안을 시험해 보았지만 반짝이는 서버에서 실행될 때 여전히 실패했다. 그것은 runApp()와 잘 동작합니다. sDom은 DataTable에서 사용되지 않는 인수 이름입니다. dom과 동일한 것입니다. –

+0

안녕하세요 @ AlasdairDouglas, 1M + 행 및 문제가없는 예제 데이터 집합보다 많은 열이있는 프로덕션의 반짝이는 서버 환경에서 비슷한 코드를 사용하고 있습니다. 나는 DT 패키지가 당신의 문제가있는 곳이 아니라고 제안 할 것이다. –

+0

그게 도움이 Kevin, 감사합니다. 반짝이는 서버에 설정 문제가있는 것처럼 들리므로 거기에서 실험을해야합니다. –