首页 文章

将闪亮的应用程序开发为一个包并将其部署到闪亮的服务器上

提问于
浏览
21

我正在开发一个闪亮的应用程序,因为我想使用该功能的自动化测试和文档,我开始在一个包中开发接口(如推荐here) .

我在RStudio中开发了这个闪亮的应用程序,我有一个 server.R 文件,我可以点击RStudio中的 Run App 按钮,一切正常 . 我将我的包提交到github存储库,从这一点开始,我想使用 devtoolsinstall_github 函数将它安装在我的R闪亮服务器上 .

现在我想知道如何在服务器中启动我的应用程序 . 我天真地想安装软件包并指向 server.R 文件,但这在某种程度上无法正常工作 . 不确定问题出在哪里 .

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

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

EDIT Deploying to 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

这些是我更新闪亮应用时的步骤 . 我通常再次以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

我们仍然需要做的一件事是在 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服务器上使用 .

2 回答

  • 21

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

    在R目录中:

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

    • A launch_application 功能

    launch_application 的定义类似于:

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

    在inst目录中

    • application/server.R

    • application/ui.R

    • application/global.R

    在构建和安装包之后,我只需要运行

    library(my_pkg)
    launch_application(...)
    
  • 8

    许多选票已经有了一个公认的答案,但我也会回答自己的问题 . 有关更多信息,请阅读我的文章Supplementing your R package with a Shiny app .

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

    - 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(".")
    

    (你也可以看到这个,代码here

相关问题