我正在开发一个闪亮的应用程序,因为我想使用该功能的自动化测试和文档,我开始在一个包中开发接口(按照建议here)。
我在RStudio中开发这个闪亮的应用程序,我有一个server.R
文件,我可以点击RStudio中的运行应用程序按钮,一切正常。我将我的包提交到github存储库,从这一点开始,我想使用devtools
和install_github
函数将其安装在我的 R闪亮服务器上。
现在我想知道如何在服务器中启动我的应用程序。我天真地想着安装软件包并指向server.R
文件,但这在某种程度上是行不通的。不确定问题出在哪里。
我的第二次尝试是在闪亮服务器可访问的文件夹中创建一个名为app.R
的文件,在这个文件中,我基本上加载了我的包,闪亮和其他所需的包,但它因为缺少变量而以某种方式抱怨...
有人可以给我一个建议吗?我也很乐意回答任何问题,因为我不确定如何正确地提出这个问题。 提前谢谢。
编辑部署到闪亮的服务器
由于 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.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服务器上使用。
答案 0 :(得分:21)
当我将闪亮的应用程序作为独立程序包创建时,我通常会按如下方式组织文件:
在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(...)
答案 1 :(得分:10)
许多选票已经有了一个公认的答案,但我想补充一些内容,所以我也会自己回答。有关详细信息,请阅读我的文章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)
答案 2 :(得分:0)
许多带有概念验证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)