Shiny Server: при загрузке генерируется загружаемый PDF-файл (код работает локально) - PullRequest
0 голосов
/ 18 сентября 2018

Я размещаю блестящее приложение («альфа») на удаленной платформе Ubuntu 16.04 LTS. При загрузке каталога Shiny App, который полностью работает при локальном запуске, функция генерирования .pdf не работает. В частности, браузер возвращает следующее сообщение об ошибке:

Firefox не может найти файл в http://IP/alpha/session/88c0e307e045e4b519908a73b85476f4/download/report?w=.

Сначала я подозревал, что это проблема с правами пользователя, и подарил «блестящему» пользователю (который запускает приложение по умолчанию в Ubuntu) доступ на чтение-запись-exec к папке / tmp /, учитывая, что для создания .pdf используется временная папка для генерации отчета.

sudo setfacl -m 'u:shiny:rwx' /tmp/

К сожалению, проблема остается. Ниже приведены мои версии пакета:

knitr        "knitr"        "/usr/local/lib/R/site-library" "1.20"
rmarkdown    "rmarkdown"    "/usr/local/lib/R/site-library" "1.10"  
shiny        "shiny"        "/usr/local/lib/R/site-library" "1.1.0"
tinytex      "tinytex"      "/usr/local/lib/R/site-library" "0.8"
/opt/shiny-server/ext/pandoc/pandoc --version pandoc 1.19.2.1

Пакет Pandoc был скомпилирован после установки Shiny Server, а пакет TinyTex был установлен следующим образом: https://yihui.name/tinytex/.

Вот журнал ошибок, созданный Shiny Server:

Listening on http://127.0.0.1:43458
165: ispresent
164: scatter3D
163: renderPlot [/srv/shiny-server/alpha/server.R#254]
161: func
121: drawPlot
107: <reactive:plotObj>
91: drawReactive
78: origRenderFunc
77: output$dist
1: runApp

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

sh: 1: pdflatex: not found
Warning: Error in : Failed to compile /tmp/Rtmp25Y4aU/file5bf19f9dd9f.tex. [No stack trace available]

Я прилагаю downloadHandler ниже. Как указано выше, он полностью функционирует локально.

output$report = downloadHandler(

                  filename = 'xxx.pdf',

                  content = function(file) {

                    tempReport <- file.path(tempdir(), "report.Rmd")
                    file.copy("report.Rmd", tempReport, overwrite = TRUE)

                    # Set up parameters to pass to Rmd document
                    params <- list(mat = allocation_values$rendered[allocation_values$rendered$Allocation > 0])

                    rmarkdown::render(tempReport, output_file = file,
                                      params = params,
                                      envir = new.env(parent = globalenv()))

                  })

РЕДАКТИРОВАТЬ: Добавлен вывод> tinytex :: tlmgr_conf ()

=========================== version information ==========================
tlmgr revision 48522 (2018-08-31 06:03:37 +0200)
tlmgr using installation: /root/.TinyTeX
TeX Live (http://tug.org/texlive) version 2018
==================== executables found by searching PATH =================
PATH: /root/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
dvipdfmx:  /root/bin/dvipdfmx
dvips:     0
fmtutil:   /root/bin/fmtutil
kpsewhich: /root/bin/kpsewhich
luatex:    /root/bin/luatex
mktexpk:   /root/bin/mktexpk
pdftex:    /root/bin/pdftex
tex:       0
tlmgr:     /root/bin/tlmgr
updmap:    /root/bin/updmap
xetex:     /root/bin/xetex
=========================== active config files ==========================
Missing argument in sprintf at /root/bin/tlmgr line 6159.
config.ps:        fmtutil.cnf:      /root/.TinyTeX/texmf-dist/web2c/fmtutil.cnf
mktex.cnf:        /root/.TinyTeX/texmf-dist/web2c/mktex.cnf
pdftexconfig.tex: /root/.TinyTeX/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex
texmf.cnf:        /root/.TinyTeX/texmf.cnf
texmf.cnf:        /root/.TinyTeX/texmf-dist/web2c/texmf.cnf
updmap.cfg:       /root/.TinyTeX/texmf-dist/web2c/updmap.cfg
============================= font map files =============================
kanjix.map:  /root/.TinyTeX/texmf-var/fonts/map/dvipdfmx/updmap/kanjix.map
pdftex.map:  /root/.TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map
ps2pk.map:   /root/.TinyTeX/texmf-var/fonts/map/dvips/updmap/ps2pk.map
psfonts.map: /root/.TinyTeX/texmf-var/fonts/map/dvips/updmap/psfonts.map
=========================== kpathsea variables ===========================
ENCFONTS=.:{/usr/share/R/share/texmf,/root/.TinyTeX/texmf-config,/root/.TinyTeX/texmf-var,/root/.TinyTeX/texmf-home,!!/root/texmf-local,!!/root/.TinyTeX/texmf-config,!!/root/.TinyTeX/texmf-var,!!/root/.TinyTeX/texmf-dist}/fonts/enc//
SYSTEXMF=/root/.TinyTeX/texmf-var:/root/texmf-local:/root/.TinyTeX/texmf-dist
TEXCONFIG={/usr/share/R/share/texmf,/root/.TinyTeX/texmf-config,/root/.TinyTeX/texmf-var,/root/.TinyTeX/texmf-home,!!/root/texmf-local,!!/root/.TinyTeX/texmf-config,!!/root/.TinyTeX/texmf-var,!!/root/.TinyTeX/texmf-dist}/dvips//
TEXFONTMAPS=.:{/usr/share/R/share/texmf,/root/.TinyTeX/texmf-config,/root/.TinyTeX/texmf-var,/root/.TinyTeX/texmf-home,!!/root/texmf-local,!!/root/.TinyTeX/texmf-config,!!/root/.TinyTeX/texmf-var,!!/root/.TinyTeX/texmf-dist}/fonts/map/{kpsewhich,pdftex,dvips,}//
TEXMF={/usr/share/R/share/texmf,/root/.TinyTeX/texmf-config,/root/.TinyTeX/texmf-var,/root/.TinyTeX/texmf-home,!!/root/texmf-local,!!/root/.TinyTeX/texmf-config,!!/root/.TinyTeX/texmf-var,!!/root/.TinyTeX/texmf-dist}
TEXMFCONFIG=/root/.TinyTeX/texmf-config
TEXMFDBS={!!/root/texmf-local,!!/root/.TinyTeX/texmf-config,!!/root/.TinyTeX/texmf-var,!!/root/.TinyTeX/texmf-dist}
TEXMFDIST=/root/.TinyTeX/texmf-dist
TEXMFHOME=/root/.TinyTeX/texmf-home
TEXMFLOCAL=/root/texmf-local
TEXMFMAIN=/root/.TinyTeX/texmf-dist
TEXMFSYSCONFIG=/root/.TinyTeX/texmf-config
TEXMFSYSVAR=/root/.TinyTeX/texmf-var
TEXMFVAR=/root/.TinyTeX/texmf-var
TEXPSHEADERS=.:{/usr/share/R/share/texmf,/root/.TinyTeX/texmf-config,/root/.TinyTeX/texmf-var,/root/.TinyTeX/texmf-home,!!/root/texmf-local,!!/root/.TinyTeX/texmf-config,!!/root/.TinyTeX/texmf-var,!!/root/.TinyTeX/texmf-dist}/{dvips,fonts/{enc,type1,type42,type3}}//
VARTEXFONTS=/root/.TinyTeX/texmf-var/fonts
WEB2C={/usr/share/R/share/texmf,/root/.TinyTeX/texmf-config,/root/.TinyTeX/texmf-var,/root/.TinyTeX/texmf-home,!!/root/texmf-local,!!/root/.TinyTeX/texmf-config,!!/root/.TinyTeX/texmf-var,!!/root/.TinyTeX/texmf-dist}/web2c
==== kpathsea variables from environment only (ok if no output here) ====

1 Ответ

0 голосов
/ 18 сентября 2018

Ошибка показывает, что pdflatex не найдено:

sh: 1: pdflatex: not found

В выводе tinytex::tlmgr_conf() мы видим, что pdftex установлен в /root, то есть в каталог HOME root пользователь:

pdftex:    /root/bin/pdftex

Выглядит так, как будто вы выполнили tinytex::install_tinytex() как root пользователь.Пользователь shiny, который запускает сервер Shiny, не имеет доступа к этому каталогу.Вы можете добавить установку TinyTeX для пользователя shiny следующим образом:

sudo su - shiny
R -e 'tinytex::install_tinytex()'

Я не знаю, можно ли выполнить установку в масштабе всей системы, используя tinytex.

...