R-开发闪亮的应用程序包装并将其部署到Shiny Server



我正在开发一个闪亮的应用程序,并且由于我想使用自动化的测试和功能文档,因此我开始在软件包中开发接口(如下所示)。

我在rstudio中开发了这个闪亮的应用程序,并且我有一个server.R文件,我可以单击rstudio中的运行应用程序按钮,并且一切正常。我将包装提交给GitHub存储库,从这一点开始,我想使用devtoolsinstall_github函数将其安装在Shiny Server 上。

现在,我想知道如何在服务器中启动我的应用程序。我很天真地想安装软件包并指向server.R文件,但这是不起作用的。不确定问题在哪里。

我的第二次尝试是在闪亮服务器上可访问的文件夹中创建一个名为 app.R的文件,在此文件中,我基本上加载了我的软件包,闪亮和其他所需软件包,但由于丢失的变量,它以某种方式抱怨...

有人可以给我一个建议吗?我也很乐意回答任何问题,因为我不确定如何正确提出这个问题。预先感谢。

编辑部署到Shiny Server

由于 colin d 在评论中询问,如何在闪亮的服务器上部署这些软件包,我想演示我如何做。

首先,我直接通过命令行安装了我的软件包, root 带有以下命令。

su - -c "R -e "devtools::install_github('user/shinypackage')"" 

下一步是更改包装文件夹的所有者

chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/

然后我重新启动闪亮的服务器,因为这有时在缓存左右是有问题的。

systemctl restart shiny-server

这些是我更新闪亮应用程序时所做的步骤。我正常在单行中再次这样做

su - -c "R -e "devtools::install_github('user/shinypackage')"" &  chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/ & systemctl restart shiny-server

我们仍然需要做的一件事是在shiny-server.conf文件中设置目录。我刚刚添加了包装路径 保存ui.Rserver.R的应用程序目录。

  location /shinypackage {
    app_dir /usr/local/lib/R/site-library/shinypackage/application;
    log_dir /var/log/shiny-server;
  }

然后,我必须使用systemctl restart shiny-server再次重新启动服务器。

这是在Ubuntu服务器上使用的。

已经有很多选票的答案,但是我想添加一些东西,所以我也会回答自己。有关更多信息,您可以阅读我的文章,并用闪亮的应用程序补充您的R包。

这是我使用的文件夹结构:

- mypacakge
  |- inst
      |- myapp
         |- ui.R
         |- server.R
  |- R
     |- runApp.R
     |- ...
  |- DESCRIPTION
  |- ...

R/文件夹内是我放置所有非闪光代码的地方。闪亮应用程序本身的代码生活在inst/中。R/runApp.R文件定义为

#' @export
runExample <- function() {
  appDir <- system.file("myapp", package = "mypackage")
  if (appDir == "") {
    stop("Could not find myapp. Try re-installing `mypackage`.", call. = FALSE)
  }
  shiny::runApp(appDir, display.mode = "normal")
}

(您可以在行动中看到此内容;例如,Shinyalert为其演示应用使用此结构)。

在评论中,您询问如何将其部署在闪亮的服务器上。很简单,您可以只使用一个 /srv/shiny-server/myapp.app.R来调用并运行该软件包(在您在服务器上安装软件包后):

dir <- system.file("myapp", package = "mypackage")
setwd(dir)
shiny::shinyAppDir(".")

(您也可以在此处看到此操作,在此处代码)

当我将闪亮的应用程序作为独立包装时,我通常会这样组织文件:

在r目录中:

  • 我支持该应用程序的所有方法(如果将它们用于ui.Rserver.Rglobal.R文件,则应导出这些方法)
  • launch_application功能

launch_application的定义类似于:

launch_application <- function(x, ...)
{
  shiny::runApp(appDir = system.file("application", package = [my_pkg]),
                ...)
}

在Inst Directory

  • application/server.R
  • application/ui.R
  • application/global.R

构建和安装软件包后,我只需要运行

library(my_pkg)
launch_application(...)

许多带有概念证明光泽演示的软件包不是为在Shiny Server上部署而设计的,而是将类似的内容包括在rstudio运行的函数中:

fooRun <- function() {
   app <- shinyApp(appUI, appServer)
   runApp(app, launch.browser = TRUE, ...)
}

此功能在Shiny Server中无法使用(您不能在runApp中运行runApp),但是它为如何创建可以用作/srv/shiny-server/foo/app.R

的占位符的应用程序提供了一些线索。
library("foo")
shinyApp(ui = foo:::appUI, server = foo:::appServer)

最新更新