разработка приложения shiny в виде пакета и его развертывание на сервере shiny
я разрабатываю блестящее приложение, и поскольку я хотел использовать автоматическое тестирование и документацию функции, я начал разрабатывать интерфейс в пакете (как рекомендуется здесь).
я разрабатываю это блестящее приложение в RStudio, и у меня есть server.R
файл, который я могу нажать на Запустить Приложение кнопка в RStudio и все работает. Я передаю свой пакет в репозиторий github, и с этого момента я хочу установить его на свой R блестящий сервер используя devtools
и .
теперь мне интересно, как запустить мое приложение на сервере. Я наивно думал об установке пакета и указывал на server.R
файл, но это как-то не работает. Не уверен, где проблемы.
моей второй попыткой было создание файла под названием app.R
в папке, доступной блестящим сервером, и в этом файле я в основном загружаю свой пакет, блестящие и другие необходимые пакеты, но он как-то жалуется из-за пропущенных переменных...
может кто-нибудь дать мне совет? Я также рад ответить на любой вопрос, так как я не уверен, как правильно задать эту проблему. Спасибо заранее.
изменить развертывание на shiny server
С Колин Д' спрашивал в комментариях, как развернуть эти пакеты на блестящем сервере, я хотел продемонстрировать, как я это делаю.
прежде всего я устанавливаю свой пакет на 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
это шаги, которые я делаю, когда я обновляю свое блестящее приложение. Я делаю это нормально снова как 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
одна вещь, которую нам все еще нужно сделать, это чтобы настроить каталог в . Я просто добавил путь к пакету+каталог приложения, где 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.
2 ответов
когда я делаю блестящие приложения в качестве автономного пакета, я обычно упорядочиваю файлы следующим образом:
в каталоге R:
- все мои методы для поддержки приложения (они должны быть экспортированы, если они будут использоваться в элементе
ui.R
,server.R
илиglobal.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(...)
уже есть принятый ответ со многими голосами, но я хотел бы добавить несколько вещей, поэтому я отвечу и сам. Для получения дополнительной информации, вы можете прочитать мою статью дополнение вашего пакета R блестящим приложением.
это структура папок, которую я использую:
- mypacakge
|- inst
|- myapp
|- ui.R
|- server.R
|- R
|- runApp.R
|- ...
|- DESCRIPTION
|- ...
внутри R/
папка, где я размещаю Весь не блестящий код. Код для самого приложения shiny живет в inst/
. The это as
#' @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(".")
(вы также можете увидеть это в действии, code здесь)