开发闪亮的应用程序作为一个包并将其部署到闪亮的服务器
developing shiny app as a package and deploying it to shiny server
我正在开发一个闪亮的应用程序,因为我想使用该功能的自动化测试和文档,所以我开始在一个包中开发界面(按照推荐 )。
我在 RStudio 中开发了这个闪亮的应用程序,我有一个 server.R
文件,我可以单击 RStudio 中的 运行 App 按钮,一切正常.我将我的包提交到 github 存储库,从这一点开始,我想使用 devtools
和 install_github
函数将它安装在我的 R shiny server 上。
现在我想知道如何在服务器中启动我的应用程序。我天真地想安装包并指向 server.R
文件,但这不知何故不起作用。不知道问题出在哪里。
我的第二次尝试是在 shiny 服务器可访问的文件夹中创建一个名为 app.R
的文件,在这个文件中我基本上加载了我的包、shiny 和其他需要的包,但它由于缺少变量而以某种方式抱怨。 ..
有人可以给我一个建议吗?我也很乐意回答任何问题,因为我不确定如何正确地提出这个问题。
提前致谢。
编辑部署到闪亮的服务器
由于 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
这些是我更新 shiny 应用程序时执行的步骤。我通常以 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.R
和server.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目录中:
- 我支持该应用程序的所有方法(如果它们将在
ui.R
、server.R
或 global.R
文件中使用,则应导出它们)
- 一个
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(...)
已经有一个接受了很多投票的答案,但我想补充一些东西,所以我也会回答自己。更多信息可以看我的文章Supplementing your R package with a Shiny app.
这是我使用的文件夹结构:
- mypacakge
|- inst
|- myapp
|- ui.R
|- server.R
|- R
|- runApp.R
|- ...
|- DESCRIPTION
|- ...
在 R/
文件夹中,我放置了所有 non-shiny 代码。闪亮应用程序本身的代码位于 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)
许多带有概念验证 Shiny 演示的包并不是为在 Shiny Server 上部署而设计的,而是在 RStudio 的 运行 函数中包含类似这样的东西:
fooRun <- function() {
app <- shinyApp(appUI, appServer)
runApp(app, launch.browser = TRUE, ...)
}
此函数在 Shiny Server 中不起作用(您不能在 runApp
中 运行 runApp
),但它提供了一些关于如何创建 app.R 可以作为占位符在 /srv/shiny-server/foo/app.R
中使用
library("foo")
shinyApp(ui = foo:::appUI, server = foo:::appServer)
我正在开发一个闪亮的应用程序,因为我想使用该功能的自动化测试和文档,所以我开始在一个包中开发界面(按照推荐
我在 RStudio 中开发了这个闪亮的应用程序,我有一个 server.R
文件,我可以单击 RStudio 中的 运行 App 按钮,一切正常.我将我的包提交到 github 存储库,从这一点开始,我想使用 devtools
和 install_github
函数将它安装在我的 R shiny server 上。
现在我想知道如何在服务器中启动我的应用程序。我天真地想安装包并指向 server.R
文件,但这不知何故不起作用。不知道问题出在哪里。
我的第二次尝试是在 shiny 服务器可访问的文件夹中创建一个名为 app.R
的文件,在这个文件中我基本上加载了我的包、shiny 和其他需要的包,但它由于缺少变量而以某种方式抱怨。 ..
有人可以给我一个建议吗?我也很乐意回答任何问题,因为我不确定如何正确地提出这个问题。 提前致谢。
编辑部署到闪亮的服务器
由于 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
这些是我更新 shiny 应用程序时执行的步骤。我通常以 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.R
和server.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目录中:
- 我支持该应用程序的所有方法(如果它们将在
ui.R
、server.R
或global.R
文件中使用,则应导出它们) - 一个
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(...)
已经有一个接受了很多投票的答案,但我想补充一些东西,所以我也会回答自己。更多信息可以看我的文章Supplementing your R package with a Shiny app.
这是我使用的文件夹结构:
- mypacakge
|- inst
|- myapp
|- ui.R
|- server.R
|- R
|- runApp.R
|- ...
|- DESCRIPTION
|- ...
在 R/
文件夹中,我放置了所有 non-shiny 代码。闪亮应用程序本身的代码位于 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)
许多带有概念验证 Shiny 演示的包并不是为在 Shiny Server 上部署而设计的,而是在 RStudio 的 运行 函数中包含类似这样的东西:
fooRun <- function() {
app <- shinyApp(appUI, appServer)
runApp(app, launch.browser = TRUE, ...)
}
此函数在 Shiny Server 中不起作用(您不能在 runApp
中 运行 runApp
),但它提供了一些关于如何创建 app.R 可以作为占位符在 /srv/shiny-server/foo/app.R
library("foo")
shinyApp(ui = foo:::appUI, server = foo:::appServer)