簡體   English   中英

在 Dockerfile 中使用 Shiny::runApp 和超時問題

[英]Using shiny::runApp in Dockerfile and issues with timeout

我在部署到 AWS 的 Docker 容器中有一個 Shiny 應用程序。

不幸的是,我無法提供一個完全可重現的示例,因為這里有許多帶有app.R文件的移動部分、連接到我們 SQL 數據庫的應用程序、連接到 AWS 的信息等。

但是,Dockerfile 安裝了所有必要的依賴項,並以通過Rscript運行 Shiny 應用程序結束,該應用程序只執行 Shiny shiny::runApp('.', host='0.0.0.0', port=8080)

這部署得很好,我可以通過分配它的網址訪問它。

但是,如果用戶切換到新窗口、更改選項卡太長時間或使其閑置太長時間,應用程序將超時並執行 Shiny 應用程序所做的熟悉的“變灰”。

當我執行shiny::runApp()時,有沒有辦法防止這種情況發生? 我在文檔中找不到任何超時參數。

上下文:Shiny 使用websocket (RFC 6455)進行持續的客戶端-服務器通信。 如果出於某種原因,此 websocket 連接斷開連接,則用戶體驗將被描述為“灰顯”。 根據您的設置,發生這種情況的可能性有多種,其中一個選項最有可能:代理或負載均衡器設置了意外的 http 超時值。

:根據我們自己的設置,使用 Kubernetes 和 nginx-ingress 的獨立 Shiny 應用程序(不涉及 Shiny 服務器),默認設置允許延遲連接長達 60 秒。 我們能夠通過在清單中添加以下注釋來操縱這種行為:

kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-read-timeout: '3600'
    nginx.ingress.kubernetes.io/proxy-send-timeout: '3600'

請注意,根據您的配置,可能會涉及更多代理,這可能會使事情復雜化(不要問我是怎么知道的......)。

或者,您可以嘗試通過向 Shiny 應用程序添加心跳機制來防止任何超時。 在 GitHub 上的這個 issue中討論了一些這樣做的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM