带有可下载 md 报告的闪亮应用程序,错误:“pandoc:找不到数据文件”由闪亮服务器运行时

Posted

技术标签:

【中文标题】带有可下载 md 报告的闪亮应用程序,错误:“pandoc:找不到数据文件”由闪亮服务器运行时【英文标题】:shiny app with downloadable md report, error: "pandoc: Could not find data file" when run by shiny-server 【发布时间】:2017-10-12 21:50:06 【问题描述】:

我创建了一个闪亮的应用程序,它提供了一个下载按钮。按下时,将以 html 格式创建降价报告。这是应用程序:

server <- function(input, output) 
  output$report <- downloadHandler(
    filename = "report.html",
    content = function(file)
      tempReport <- file.path(tempdir(), "report.Rmd")
      file.copy("report.Rmd", tempReport, overwrite = TRUE)
      out <- rmarkdown::render(tempReport, output_file = file)
    
  )


ui <- fluidPage(
  downloadButton("report", label=NULL)
)

shinyApp(ui = ui, server = server)

report.Rmd 看起来像这样:

---
output: html_document
---
## Hello
```r map
leaflet::leaflet()
```

如果我从 rstudio-server 运行应用程序,一切正常:创建并下载一个独立的 html 文件。它包括传单地图。

但是,如果我从闪亮服务器运行它,我得到的只是以下错误:

processing file: report.Rmd
output file: report.knit.md

pandoc: Could not find data file /usr/lib64/R/library/leaflet/htmlwidgets/lib/leaflet/
Warnung: Error in : pandoc document conversion failed with error 97
Stack trace (innermost first):
    53: pandoc_convert
    52: convert
    51: rmarkdown::render
    50: download$func [/srv/shiny-server/biserver/downReport/app.R#7]
     1: runApp
Error : An error has occurred. Check your logs or contact the app author for clarification.

该错误似乎是通过组合 rmarkdown、shiny-server 和传单触发的。例如,从报告中删除传单可以修复它。

非常感谢任何帮助。

这是 sessionInfo() 的输出:

R version 3.3.3 (2017-03-06)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)

locale:
 [1] LC_CTYPE=de_DE.UTF-8       LC_NUMERIC=C               
LC_TIME=de_DE.UTF-8        LC_COLLATE=de_DE.UTF-8    
 [5] LC_MONETARY=de_DE.UTF-8    LC_MESSAGES=de_DE.UTF-8    
LC_PAPER=de_DE.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             
LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] shiny_1.0.3

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.10    digest_0.6.12   rprojroot_1.2   mime_0.5        
R6_2.2.1        xtable_1.8-2    jsonlite_1.4   
 [8] backports_1.0.5 magrittr_1.5    evaluate_0.10   stringi_1.1.5   
leaflet_1.1.0   rmarkdown_1.5   tools_3.3.3    
[15] stringr_1.2.0   htmlwidgets_0.8 crosstalk_1.0.0 yaml_2.1.14     
httpuv_1.3.3    htmltools_0.3.6 knitr_1.15.1   

我正在使用 Shiny Server v1.5.3.838 (Node.js v6.10.0)。这是我的 shiny-server.conf:

run_as shiny;
# Define a server that listens of port 3839.
server 
   listen 3839;

  location / 
     site_dir /srv/shiny-server/biserver;
     log_dir /var/log/shiny-server;
  

【问题讨论】:

我采用了您的可重现示例,将其切换为单独的 ui.R 和 server.R 文件,并将其放在 shinyapps.io here。它似乎工作正常。也许问题在于您安装了闪亮的服务器?您可能想尝试删除并重新安装相关软件包。 @PauldeBarros:不幸的是,这并没有帮助。将应用拆分为 ui.R 和 server.R 后问题仍然存在。 您是否在某处安装了另一个闪亮的服务器?如果是这样,您可以尝试对其进行测试。由于它在 shinyapps.io 上运行,因此它似乎应该在一般的闪亮服务器上。我更新了 shinyapps.io 版本以显示 sessioninfo()。有趣的是,它没有在“通过命名空间加载”列表中显示传单。 我实际上是从头开始重新安装了一台服务器,并在另一台服务器上进行了尝试。两者都运行 CentOS 7。 有趣。我发现了一些例子,有人说他们无法在 Centos 机器上安装 R 的传单包。 ex1ex2。这听起来像是一个不同但可能相关的问题。不幸的是,我对 Centos 或传单知之甚少,无法提供帮助。 【参考方案1】:

同样的问题... 解决了。​​

shiny-server 和 rstudio 服务器在安装目录中嵌入了 pandoc。

只需删除闪亮服务器的坏 pandoc 二进制文件,并在同一位置建立一个到新 pandoc 版本的逻辑链接,或者在我的例子中,我使用了本地 rstudio 服务器的 pandoc 版本。

【讨论】:

谢谢!像魅力一样工作。

以上是关于带有可下载 md 报告的闪亮应用程序,错误:“pandoc:找不到数据文件”由闪亮服务器运行时的主要内容,如果未能解决你的问题,请参考以下文章

报告2565G网络架构设计白皮书-中文版(21页可下载)

带有本地文件的 Firefox @font-face - 可下载字体:下载失败

闪亮的应用程序:禁用下载按钮

字体加载错误:可下载字体:紧缩:子表太大,表被丢弃

字体真棒错误:可下载字体:被消毒剂拒绝

Firefox 上的可下载字体:URI 错误或不允许跨站点访问