Я создавал докер-контейнер для приложения R и постоянно сталкивался с ошибкой при загрузке отчета в формате PDF. Функция отчета в формате PDF отлично работает в R на локальном компьютере, но при создании контейнера выдает ошибку, указанную ниже. Я попытался принудительно установить определенные пакеты, а именно Knitr и Rmarkdown, как упоминалось в других вопросах, однако он по-прежнему показывает ту же ошибку. В загружаемом файле Chrome просто написано «Failed - Server Problem». Я протестировал загрузку файла CSV с помощью приложения, которое работает нормально, поэтому я считаю, что это проблема с созданием и загрузкой отчета в формате PDF с уценкой.
Я включил сборочный Dockerfile в помощь. Любые предложения были бы потрясающими!
Спасибо!
ДОКЕРФАЙЛ:
FROM openanalytics/r-base
MAINTAINER ________
# system libraries of general use
RUN apt-get update && apt-get install -y \
sudo \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libcairo2-dev \
libxt-dev \
libssl-dev \
libssh2-1-dev \
libxml2-dev \
libssl1.0.0 \
libpq-dev \
git \
texlive-full \
html-xml-utils \
libv8-3.14-dev
# system library dependency for the app
RUN apt-get update
# install packages for R
RUN R -e "install.packages(c('hms','devtools'), repos='https://cloud.r-
project.org/')"
RUN R -e "require(devtools)"
RUN R -e "install.packages(c('car'), repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('readxl', version = '1.0.0',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('DT', version = '0.2',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('shinydashboard', version = '0.6.1',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('knitr', version = '1.18',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('magrittr', version = '1.5',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('ggrepel', version = '0.7.0',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('dplyr', version = '0.7.4',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('Rcpp', version = '0.12.14',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('rhandsontable', version = '0.3.4',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('shinyjs', version = '0.9.1',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('V8', version = '1.5',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('data.table', version = '1.10.4-3',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('packrat', version = '0.4.8-1',
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('zoo', version = '1.8-1',
repos='https://cloud.r-project.org/')"
RUN R -e "install.packages('shiny', repos='https://cloud.r-project.org/')"
RUN wget https://github.com/rstudio/rmarkdown/archive/v1.8.tar.gz
RUN R CMD INSTALL v1.8.tar.gz
RUN R -e "install.packages('xml2', repos='https://cloud.r-project.org/')"
RUN R -e "install.packages('rvest', repos='https://cloud.r-project.org/')"
RUN wget https://cran.r-
project.org/src/contrib/Archive/kableExtra/kableExtra_0.3.0.tar.gz
RUN R CMD INSTALL kableExtra_0.3.0.tar.gz
# copy the app to the image
RUN mkdir /root/tsk
COPY tsk /root/tsk
COPY Rprofile.site /usr/lib/R/etc/
EXPOSE 3838
CMD ["R", "-e", "shiny::runApp('/root/tsk')"]
ОШИБКА ОТ ДОКЕРА:
Listening on http://0.0.0.0:3838
Warning in normalizePath(path, winslash = winslash, mustWork = mustWork) :
path[1] = "/tmp/RtmpMu8ezy/TSK.Rmd": No such file or directory
Warning: Error in tools::file_path_as_absolute: file '/tmp/RtmpMu8ezy/TSK.Rmd'
does not exist
[No stack trace available]
Warning in normalizePath(path, winslash = winslash, mustWork = mustWork) :
path[1] = "/tmp/RtmpMu8ezy/TSK.Rmd": No such file or directory
Warning: Error in tools::file_path_as_absolute: file '/tmp/RtmpMu8ezy/TSK.Rmd'
does not exist
[No stack trace available]
Warning in normalizePath(path, winslash = winslash, mustWork = mustWork) :
path[1] = "/tmp/RtmpMu8ezy/TSK.Rmd": No such file or directory
Warning: Error in tools::file_path_as_absolute: file '/tmp/RtmpMu8ezy/TSK.Rmd'
does not exist
[No stack trace available]
Привет, r2evans, спасибо за ответ. TSK.Rmd - это таблица уценки R, которая используется для рендеринга PDF. Он находится в папке, в которой находятся все файлы проекта R. Контейнер докера должен иметь этот файл внутри контейнера. По крайней мере, я так думаю.
Хорошо, но единственная линия Dockerfile, которая может быть близка, - это COPY tsk /root/tsk, а не /tmp/Rtmp.../TSK.Rmd. Я просто не могу воспроизвести это как есть. (Кстати: никогда не используйте require(pkgname), если вы не проверите возвращаемое значение и не сделаете что-нибудь с этим знанием; используйте library(pkgname), если вы не планируете проверять, вернул ли requireTRUE. stackoverflow.com/a/51263513/3358272)
может быть проблема с PNADOC ... вы можете проверить в сообществе?
Привет, r2evans, спасибо за подсказку по require / library, обновлю мой файл докеров. Мне удалось решить проблему! Он просто менял имя файла CASE с tsk.Rmd на TSK.Rmd - причина этого в том, что тестирование всегда проводилось на OSX в среде IDE, которая не вызывала никаких ошибок, однако при создании контейнера с Ubuntu, который чувствителен к регистру, он не удалось найти файл разметки .. Все исправлено :)





Простое изменение имени файла CASE с tsk.Rmd на TSK.Rmd - причина этого в том, что тестирование всегда проводилось на OSX в среде IDE, которая не вызывала никаких ошибок, однако при создании контейнера с Ubuntu, который чувствителен к регистру, это было невозможно чтобы найти файл уценки.
При сборке с разными операционными системами обязательно проверьте, чувствительна ли система к регистру! Легкая ошибка!
Мне непонятно, откуда взялся
TSK.Rmd. Это в одном из пакетов, которые вы устанавливаете?