У меня есть блестящее приложение, в котором пакеты загружаются с использованием library()
в файле server.R . Это работает, но я не уверен, что это лучший способ сделать это.
Когда я преобразовал это приложение в пакет R, я удалил вызовы library
. Добавлен файл DESCRIPTION и файл R, в котором я создал такую функцию:
...
#' @importFrom tidyr gather spread
#' @importFrom viridisLite viridis inferno magma plasma
#' @importFrom writexl write_xlsx
#' @export
#'
run_my_app <- function(display.mode="normal",launch.browser=TRUE,...) {
appDir <- system.file("app", package="mypackage")
shiny::runApp(appDir,display.mode=display.mode,launch.browser=launch.browser,...)
}
После установки пакета запустите library(mypackage)
и запустите функцию run_my_app()
, которая запускает приложение в браузере. . Все работает.
Теперь я докерирую этот пакет app / R. Я пробую два способа, но, похоже, это не работает. Это первый подход (отображается только соответствующий код из Dockerfile ).
RUN mkdir /srv/shiny-server/mypackage
RUN Rscript -e 'system(paste0("cp -r ",system.file(package="mypackage"),"/app/* /srv/shiny-server/mypackage"))'
RUN sudo chown -R shiny:shiny /srv/shiny-server
EXPOSE 3838
# run shiny server
CMD ["/usr/bin/shiny-server.sh"]
При запуске как docker run --rm -p 127.0.0.1:3838:3838 myimage
приложение запускается правильно, но функции из пакетов зависимостей не работают. работают, вероятно потому, что у меня нет вызовов library()
или require()
.
Это второй подход (точно так же, как пользователь использовал бы пакет shiny app r), который позволяет избежать большей части приведенного выше сценария .
EXPOSE 3838
RUN Rscript -e 'library(mypackage);mypackage::run_my_app(port=3838,host="127.0.0.1",launch.browser=FALSE)'
Но я уже застрял на образе сборки docker, так как он запускает приложение во время сборки, и приложение тоже не работает должным образом.
Конечно, я можно пропустить часть пакета R и просто использовать блестящее приложение в docker, но для этого потребуется поддерживать другой набор кода. Думаю, я бы предпочел оставить блестящее приложение в виде пакета R.
Как лучше всего работать с библиотеками при стыковке блестящего пакета R приложения?