我正在开发一个闪亮的应用程序,并且由于我想使用自动化的测试和功能文档,因此我开始在软件包中开发接口(如下所示)。
我在rstudio中开发了这个闪亮的应用程序,并且我有一个server.R
文件,我可以单击rstudio中的运行应用程序按钮,并且一切正常。我将包装提交给GitHub存储库,从这一点开始,我想使用devtools
和install_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.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包。
这是我使用的文件夹结构:
- 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.R
,server.R
或global.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)