разработка приложения 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 здесь)