web-dev-qa-db-de.com

pandoc Version 1.12.3 oder höher ist erforderlich und wurde nicht gefunden (R glänzend)

Ich habe ein Problem mit dem Generieren eines PDF-Berichts aus meiner glänzenden App, die auf einem Server gehostet wird. 

die App funktioniert gut, aber wenn ich auf die Schaltfläche drücke, um den Bericht herunterzuladen, erhalte ich folgende Fehlermeldung:

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

Das Problem ist, wenn ich pandoc -v eingebe, bekomme ich:

 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.

Ich denke, ich habe die richtige Version dafür. TexLive ist ebenfalls installiert und der Pfad befindet sich in $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 * enthält keine Berechnungen, es handelt sich lediglich um Text. Die PDF-Generierung funktioniert einwandfrei auf meiner lokalen Version (MacOS), jedoch nicht auf dem Server.

Vielen Dank im Voraus und ich bin hier, um bei Bedarf weitere Informationen zu geben.

Daniele

41

Gehen Sie in RStudio und suchen Sie die Systemumgebungsvariable für RSTUDIO_PANDOC.

Sys.getenv("RSTUDIO_PANDOC")

Fügen Sie das dann in Ihr R-Skript ein, bevor Sie den Render-Befehl aufrufen.

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

Das funktionierte für mich, nachdem ich versucht hatte herauszufinden, wie Markets Pandoc finden. Ich musste Github überprüfen, um die Quelle zu sehen.

74
Chris

Eine weitere Option, mit der dies für alle Ihre R-Skripts funktioniert, ist die globale Definition dieser Variablen.

Fügen Sie unter Debian/Ubuntu die folgende Zeile zu Ihrer .bashrc-Datei hinzu:

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

Fügen Sie unter macOS der Datei .bash_profile Folgendes hinzu:

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

Fügen Sie unter Windows (mit Git Bash ) Ihrer .bashrc-Datei Folgendes hinzu:

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

Ich habe dieses Problem am einfachsten gelöst, indem Sie den Befehl Sys.setenv (..) im Befehl crontab übergeben, bevor Sie RMarkdown :: render aufrufen. Sie müssen die beiden Befehle durch ein Semikolon trennen:

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

(Denken Sie daran, dass sich der Pfad des Rstudio-Servers von der Nicht-Server-Version unterscheidet.)

2
Thomas Goerner

Hey, ich habe gerade diesen Fehler besiegt. Ich löste das Problem, indem ich die 2 Pandoc-Dateien "Pandoc" und "Pandoc-Citeproc" aus dem Shiny-Server-Ordner löschte. Ich habe dann für jede dieser Dateien einen Link aus dem rstudio-server-Ordner erstellt. Es hat wie ein Zauber funktioniert. Dies war ein Problem für mich, als ich versuchte, Flugblätter in die rmarkdown-Dokumente einzubetten, wenn ein Shiny-Server auf einem Linux-Computer ausgeführt wurde. Ich fand es seltsam, dass es gut funktionierte, wenn ich es in rstudio auf demselben Linux-Rechner lief, aber nicht, wenn ich es mit Shiny-Server lief. Die Shiny-Server-Installation von Pandoc ist also alt/veraltet

1
DTakacs

Wenn Sie versuchen, ein Skript über die Befehlszeile unter Windows auszuführen, müssen Sie lediglich den Verzeichnispfad in der PATH-Variablen * angeben. Sie können auch eine separate Benutzervariable mit dem Namen RSTUDIO_PANDOC erstellen und dieser Variablen das Verzeichnis * zuweisen. Schließen Sie dann alle Terminals, und öffnen Sie sie erneut, um die Systempfade zu aktualisieren. **

* Experimentiere mit einem Trailing/wenn du Probleme hast . ** Ich konnte nicht auf einen UNC-Pfad zeigen. Die // am Anfang des Pfads hockten die Pandoc-Funktionen des rmarkdown-Pakets. Wenn Sie einen UNC-Pfad verwenden, müssen Sie ihn einem Laufwerk zuordnen und auf den Laufwerksbuchstaben verweisen. Es gibt Möglichkeiten, dies dynamisch zu tun. Ich benutze ein DOS/Batch-Skript, das ich über Google gefunden habe.

0
DonkeyKong

Für diejenigen, die nicht RStudio verwenden, müssen Sie möglicherweise nur Pandoc auf Ihrem System installieren. Für mich war es so

Sudo pacman -S pandoc

und es hat funktioniert (Arch Linux). 

0
haff

Wenn jemand dieses Problem hat und auch Anaconda verwendet, ist es möglich, dass er mein Problem hatte. Die rstudio-Shell lädt die .bashrc-Datei nicht, wenn sie gestartet wird. Dies bedeutet, wenn Ihre Pandoc-Version in anaconda installiert ist und von Rstudio nicht gefunden wird. Die Installation von Pandoc mit einem Befehl wie Sudo pacman -S pandoc hat für mich funktioniert!

0
Rowan Callahan