web-dev-qa-db-ja.com

pandocバージョン1.12.3以降が必要で、見つかりませんでした(R shiny)

サーバーでホストされているshinyアプリからpdfレポートを生成する際に問題があります。

アプリは正常に動作しますが、レポートをダウンロードするためにボタンを押すと、このエラーが表示されます:

 pandoc version 1.12.3 or higher is required and was not found.

問題は、pandoc -vと入力すると、次のようになることです。

 pandoc 1.12.3.3
 Compiled with texmath 0.6.6, highlighting-kate 0.5.6.1.
Syntax highlighting is supported for the following languages:
    actionscript, ada, Apache, asn1, asp, awk, bash, bibtex, boo, c, changelog,
    clojure, cmake, coffee, coldfusion, commonlisp, cpp, cs, css, curry, d,
    diff, djangotemplate, doxygen, doxygenlua, dtd, eiffel, email, erlang,
    fortran, fsharp, gnuassembler, go, haskell, haxe, html, ini, Java, javadoc,
    javascript, json, jsp, Julia, latex, Lex, literatecurry, literatehaskell,
    lua, makefile, mandoc, markdown, matlab, maxima, metafont, mips, modelines,
    modula2, modula3, monobasic, nasm, noweb, objectivec, objectivecpp, ocaml,
    octave, Pascal, Perl, php, pike, postscript, prolog, python, r,
    relaxngcompact, restructuredtext, rhtml, roff, Ruby, Rust, scala, scheme,
    sci, sed, sgml, sql, sqlmysql, sqlpostgresql, tcl, texinfo, verilog, vhdl,
    xml, xorg, xslt, xul, yacc, yaml
 Default user data directory: /home/daniele/.pandoc
 Copyright (C) 2006-2013 John MacFarlane
 Web:  http://johnmacfarlane.net/pandoc
 This is free software; see the source for copying conditions.  There is no
 warranty, not even for merchantability or fitness for a particular purpose.

だから私はそのための適切なバージョンを持っていると思います。 TexLiveもインストールされ、パスは$PATHにあります。

Server.R

library(shiny)
library(drsmooth)
library(shinyBS)
library(knitr)
library(xtable)
library(rmarkdown)

shinyServer(function(input, output,session) { 

 output$downloadReport <- downloadHandler(
filename = function() {
  paste('report', sep = '.','pdf')
},

content = function(file) {
  src <- normalizePath('report.Rmd')

  # temporarily switch to the temp dir, in case you do not have write
  # permission to the current working directory
  owd <- setwd(tempdir())
  on.exit(setwd(owd))
  file.copy(src, 'report.Rmd')

  library(rmarkdown)
  out <- render('report.Rmd')
  file.rename(out, file)
})

output$tb <- renderUI({
             p(h4("Report")),
            "Dowload a the report of your analysis in a pdf format",
            tags$br(),downloadButton('downloadReport',label="Download report"),
            tags$em("This option will be available soon")
     })
})

* report.Rmd *には、計算は一切含まれず、テキストのみです。 pdf生成は、ローカルバージョン(MacOS)では正常に機能しますが、サーバーでは機能しません。

事前に感謝し、必要に応じて他の情報を提供するためにここにいます。

ダニエル

47

RStudioに移動して、RSTUDIO_PANDOCのシステム環境変数を見つけます

Sys.getenv("RSTUDIO_PANDOC")

次に、renderコマンドを呼び出す前に、それをRスクリプトに入れます。

Sys.setenv(RSTUDIO_PANDOC="--- insert directory here ---")

Rmarkdownがpandocを見つける方法を見つけるのに苦労した後、これは私のために働きました。ソースを見るにはgithubをチェックする必要がありました。

80
Chris

これがすべてのRスクリプトで機能する別のオプションは、この変数をグローバルに定義することです。

Debian/Ubuntuでは、.bashrcファイルに次の行を追加します。

export RSTUDIO_PANDOC=/usr/lib/rstudio/bin/pandoc

MacOSでは、次を.bash_profileファイルに追加します。

export RSTUDIO_PANDOC=/Applications/RStudio.app/Contents/MacOS/pandoc

Windows( Git Bash を使用)で、次を.bashrcファイルに追加します。

export RSTUDIO_PANDOC="/c/Program Files/RStudio/bin/pandoc/"
10
John Blischak

この問題を解決した最も簡単な方法は、RMarkdown :: renderを呼び出す前に、crontabコマンド内でSys.setenv(..)コマンドを渡すことです。 2つのコマンドをセミコロンで区切る必要があります。

R -e "Sys.setenv(RSTUDIO_PANDOC='/usr/lib/rstudio-server/bin/pandoc'); rmarkdown::render('File.Rmd', output_file='output.html')"

(rstudio-serverパスは非サーバーバージョンとは異なることに注意してください)

5
Thomas Goerner

ちょっと私はこのエラーを打ち負かしました。 shiny-serverフォルダーから2つのpandocファイル「pandoc」と「pandoc-citeproc」を削除することでこれを解決しました。次に、rstudio-serverフォルダーからこれらの各ファイルへのリンクを作成しました。それは魅力のように働いた。これは、Linuxマシンでshiny-serverを実行してrmarkdownドキュメントにリーフレットを埋め込むときに問題になりました。同じLinuxマシンのrstudioで実行したときはうまく動作しましたが、shiny-serverを使用して実行したときではないことがわかりました。そのため、pandocのshiny-serverインストールは古い/古いです。乾杯

1
DTakacs

Windowsでコマンドラインからスクリプトを実行する場合は、PATH変数にディレクトリパスが必要です*。 RSTUDIO_PANDOCという名前の個別のユーザー変数を作成し、この変数にディレクトリを指定することもできます*。次に、端末をすべて閉じてから再度開いて、システムパスを更新します。**

*末尾に問題がある場合/実験してください。 ** UNCパスを指すことができませんでした。パスの先頭にある//は、rmarkdownパッケージのpandoc関数を使いました。 UNCパスを使用している場合、ドライブにマップし、ドライブ文字を参照する必要があります。これを動的に行う方法があります。 Googleで見つけたDOS /バッチスクリプトを使用します。

0
DonkeyKong

RStudioを使用していない場合は、システムにpandocをインストールするだけで済みます。私にとっては

Sudo pacman -S pandoc

そしてそれはうまくいきました(Arch Linux)。

0
haff