闪亮的服务器:套接字挂起

特征

更新:我在下面添加了解决方案

问题

一些背景知识:我正在Ubuntu精确服务器上运行Shiny服务器v1.5。基本上,我有一个rmarkdown页面,该页面允许用户使用一些参数进行播放,然后具有一个下载按钮,该按钮使用闪亮的格式生成文档,如下所示:

```{r,echo=FALSE}
downloadHandler(
  filename = "report.pdf",
  content = function(file) {
    knitr::knit2pdf("report.Rnw",envir=environment())
    file.rename(normalizePath('report.pdf'), file)
  }
)
```

Shiny应用程序在我的本地计算机上运行良好,但在服务器上崩溃。更具体地说,r markdown网页工作正常,但是一旦我单击下载按钮,该应用程序将在30秒后崩溃。服务器日志指示套接字超时错误:

[2016-02-24 03:38:52.240] [INFO] shiny-server - Starting listener on 0.0.0.0:3838
[2016-02-24 03:49:30.183] [ERROR] shiny-server - Uncaught exception: Error: socket hang up
[2016-02-24 03:49:30.184] [ERROR] shiny-server - Error: socket hang up
    at createHangUpError (_http_client.js:215:15)
    at Socket.socketCloseListener (_http_client.js:247:23)
    at Socket.emit (events.js:129:20)
    at TCP.close (net.js:485:12)
[2016-02-24 03:49:30.184] [INFO] shiny-server - Stopping listener on 0.0.0.0:3838
[2016-02-24 03:49:30.185] [INFO] shiny-server - Shutting down worker processes (with notification)
/opt/shiny-server/lib/main.js:364
  throw err;
        ^
Error: socket hang up
    at createHangUpError (_http_client.js:215:15)
    at Socket.socketCloseListener (_http_client.js:247:23)
    at Socket.emit (events.js:129:20)
    at TCP.close (net.js:485:12)

该pdf生成时间很长(大约五分钟),所以我怀疑我错过了某个地方的超时参数。这是我在闪亮的配置中所做的:

run_as shiny;
app_init_timeout 999999;
app_idle_timeout 999999;

# Define a server that listens on port 3838
server {
  listen 3838;
  ....
}

...但无济于事,因为我仍然遇到错误。任何建议将不胜感激!

解决方案

正如@daattali所提到的,在downloadButton中不能花费那么长时间,更改服务器设置不会对此进行任何更改。因此,我最终将生成和下载功能分为两部分,如下所示:

```{r, echo=FALSE}
shinyApp(
  ui = fluidPage(
    fluidRow(
      column(2,
        conditionalPanel(
          condition = "!$('makeReport').hasClass('shiny-busy')",
          actionButton("makeReport","Generate Report",icon=icon("file"))
        )
      ),
      column(4,
      conditionalPanel(
        condition = "!$('makeReport').hasClass('shiny-busy')",
        uiOutput("downloadButton")
        #downloadButton("downloadReport", "Download Report")
      )
      )
    )
  ),
  server = function(input, output) {
    output$download_button <- renderUI({
        downloadButton("downloadReport", "Download Results")
     })
    makeReportAction <- eventReactive(input$makeReport, {
        ...
        knitr::knit2pdf("report.Rnw",envir=globalenv())
    })
    output$downloadButton <- renderUI({
      makeReportAction() #only appear after first click on generate
      downloadButton("downloadReport", "Download Report")
    })
    output$downloadReport <- downloadHandler(
      filename = "report.pdf",
      content = function(file) {
        cat(paste("Does the pdf exist?",file.exists("report.pdf")))
        file.rename(normalizePath('report.pdf'), file)
      }
    )
  }
)
```
迪安·阿塔利

上周有人在Google董事会向Joe Cheng提出了可能与上述问题相同的问题

https://groups.google.com/forum/#!topic/shiny-discuss/4bL9jFaYly0

看来下载处理程序有时间限制,所以也许尝试看看是否有可能事先生成文件并且仅在单击按钮时才提供文件

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP套接字服务器挂起

来自分类Dev

PHP套接字服务器挂起

来自分类Dev

套接字Python 3.5:套接字服务器在文件接收时永久挂起

来自分类Dev

使用Apache 2.4的闪亮服务器中的代理Web套接字

来自分类Dev

空闲时间后,套接字挂起:服务器-客户端Java程序

来自分类Dev

Cordova:创建套接字服务器

来自分类Dev

套接字TCP服务器

来自分类Dev

Java服务器套接字响应

来自分类Dev

套接字服务器最佳方法

来自分类Dev

Java服务器套接字

来自分类Dev

Java Web套接字服务器

来自分类Dev

限制套接字服务器访问

来自分类Dev

Matlab套接字服务器

来自分类Dev

绑定服务器套接字

来自分类Dev

套接字服务器最佳方法

来自分类Dev

套接字未写入服务器

来自分类Dev

从套接字获取服务器名称

来自分类Dev

TCP套接字服务器

来自分类Dev

服务器的非阻塞套接字

来自分类Dev

套接字服务器性能

来自分类Dev

C ++-套接字服务器线程

来自分类Dev

读取流套接字服务器

来自分类Dev

服务器:套接字在不可预知的时间内在读取流功能下挂起

来自分类Dev

当关闭端口时,使用套接字检查远程服务器上打开的端口是否挂起,C

来自分类Dev

设置客户端套接字和服务器套接字侦听器 (Java)

来自分类Dev

C#-用于将套接字传递到多个套接字服务器的套接字路由器

来自分类Dev

Winforms服务器套接字应用程序

来自分类Dev

通过Python套接字服务器发送HTML

来自分类Dev

Python套接字服务器/客户端编程