使用Docker在闪亮的app R包中加载包
我有一个闪亮的应用程序,其中使用server.R文件中的使用Docker在闪亮的app R包中加载包,r,docker,shiny,R,Docker,Shiny,我有一个闪亮的应用程序,其中使用server.R文件中的library()加载包。这是可行的,但我不确定这是否是最好的方法 当我将此应用程序转换为R软件包时,我删除了库调用。添加了一个描述文件和一个R文件,我在其中创建了如下函数: ... #' @importFrom tidyr gather spread #' @importFrom viridisLite viridis inferno magma plasma #' @importFrom writexl write_xlsx #' @e
library()
加载包。这是可行的,但我不确定这是否是最好的方法
当我将此应用程序转换为R软件包时,我删除了库
调用。添加了一个描述文件和一个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,...)
}
当像docker run--rm-p 127.0.0.1:3838:3838 myimage那样运行时,这会正确启动应用程序,但依赖项包中的函数不起作用,可能是因为我没有任何library()
或require()
调用
这是第二种方法(就像用户使用闪亮的appr软件包一样),它避免了上述大部分脚本
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包时使用库的最佳方式?事实证明,在docker容器中启动闪亮的应用程序有多种方式。它们的工作方式也不同。讨论了细节 我最终选择了第一个方法(出于上面链接中讨论的原因),并保留了
library()
调用。调用已移动到一个文件functions.R
(具有其他帮助函数),该文件源于ui.R
和server.R
,如source(“functions.R”,local=TRUE)
。不确定是否需要local=TRUE
。我在别处看到了它的推荐
关于如何处理NAMESPACE/library()
调用以及如何在R包中使用闪亮的应用程序的详细信息,我并不完全清楚。由于functions.R
中的helper函数用于ui.R
和server.R
,因此我在这两个版本中都使用了它们。我不清楚先执行哪个文件
第二种方法不起作用,因为我应该使用CMD
而不是RUN
。大概是这样的:
...
#' @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,...)
}
CMD[“R”、“-e”、“mypackage::run_my_app(port=3838,host='127.0.0.1',launch.browser=FALSE)”
您能提供服务器.R和ui.R
的示例以及您收到的错误消息吗?是(见第11.2节)。