Shiny-Serverで実行中のR Shiny DataTableの大きなテーブルに問題があります。レンダリング後、ページが「再接続しようとしています」と点滅し、最終的にタイムアウトして接続が失われます。この現象は、Shiny-Serverに公開されたときに発生しますが、ローカルで起動されたときは、shiny::runApp()
で発生しません。R Shiny DataTableは、Shiny-Server上の大きなテーブルに対して接続を失いますが、ローカルRunAppでは接続できません。
結果がわずか3列の500,000レコードのテストで問題が発生します。小さなテーブルでは、正常に動作します。
私はDT::
パッケージに問題を切り分けました。 dataTableOutput
とrenderDataTable
にshiny::
を使用すると問題なく動作します。しかし、それは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のコンソールログに表示されます。
su: ignore --preserve-environment, it's mutually exclusive to --login.
Listening on http://127.0.0.1:43761
~
~
~
~
~
より多くを知らなくても、私の最初の考えは、テーブルの上に*サーバー側の処理*を使用することです。 [here](http://rstudio.github.io/DT/server.html)を読むと、render文に 'server = TRUE'を追加するだけで簡単にできます。ただし、ネットワークの遅延や関連性が示唆されるため、実際に問題が解決される場合もあります。 –
ありがとう@KevinArseneau。サーバー側の処理はデフォルトで有効になっており、この例では使用されています。クライアント側の処理を使用しようとすると、テーブルが大きすぎるという簡単なエラーメッセージが表示されます。 –