Je développe une application brillante et comme je voulais utiliser des tests et une documentation automatisés de la fonction, j'ai commencé à développer l'interface dans un package (comme recommandé ici ).
Je développe cette application brillante dans RStudio et j'ai un server.R
fichier sur lequel je peux cliquer sur le bouton Exécuter l'application dans RStudio et tout fonctionne. Je valide mon package dans un référentiel github et à partir de là, je veux l'installer sur mon R serveur brillant en utilisant devtools
et install_github
fonction.
Maintenant, je me demande comment démarrer mon application sur le serveur. Je pensais naïvement installer le paquet et pointant vers le server.R
fichier, mais cela ne fonctionne pas. Je ne sais pas où sont les problèmes.
Mon deuxième essai consistait à créer un fichier appelé app.R
dans un dossier accessible par le serveur shiny et dans ce fichier, je charge essentiellement mon package, shiny et les autres packages nécessaires mais il se plaint en quelque sorte à cause des variables manquantes ...
Quelqu'un peut-il me donner un conseil? Je suis également heureux de répondre à toutes les questions car je ne sais pas comment poser correctement ce problème. Merci d'avance.
EDIT Déploiement sur un serveur brillant
Puisque Colin D demandait dans les commentaires, comment déployer ces packages sur un serveur brillant, je voulais montrer comment je fais cela.
Tout d'abord, j'installe mon package sur le serveur brillant directement via la ligne de commande en tant que root avec la commande suivante.
su - -c "R -e \"devtools::install_github('user/shinypackage')\""
L'étape suivante consiste à changer le propriétaire du dossier du package
chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/
Ensuite, je redémarre le serveur brillant car cela était parfois problématique avec la mise en cache ou ainsi.
systemctl restart shiny-server
Ce sont les étapes que je fais lorsque je mets à jour mon application brillante. Je le fais normalement à nouveau en tant que root sur une seule ligne
su - -c "R -e \"devtools::install_github('user/shinypackage')\"" & chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/ & systemctl restart shiny-server
Une chose que nous devons encore faire est de configurer le répertoire dans le shiny-server.conf
fichier. Je viens d'ajouter le chemin du package + le répertoire de l'application où le ui.R
et server.R
est enregistré.
location /shinypackage {
app_dir /usr/local/lib/R/site-library/shinypackage/application;
log_dir /var/log/shiny-server;
}
Ensuite, je dois redémarrer le serveur à nouveau en utilisant systemctl restart shiny-server
.
Ceci est utilisé sur un serveur Ubuntu.
Lorsque je crée des applications brillantes en tant que package autonome, j'organise généralement les fichiers comme suit:
Dans le répertoire R:
ui.R
, server.R
, ou global.R
des dossiers)launch_application
fonctionLa définition de launch_application
est similaire à:
launch_application <- function(x, ...)
{
shiny::runApp(appDir = system.file("application", package = [my_pkg]),
...)
}
Dans le répertoire inst
application/server.R
application/ui.R
application/global.R
Après avoir construit et installé le package, j'ai juste besoin de lancer
library(my_pkg)
launch_application(...)
Il y a déjà une réponse acceptée avec de nombreux votes, mais je voudrais ajouter quelques éléments, je vais donc me répondre moi aussi. Pour plus d'informations, vous pouvez lire mon article Compléter votre package R avec une application Shiny .
Voici la structure de dossiers que j'utilise:
- mypacakge
|- inst
|- myapp
|- ui.R
|- server.R
|- R
|- runApp.R
|- ...
|- DESCRIPTION
|- ...
À l'intérieur de R/
le dossier est l'endroit où je place tout le code non brillant. Le code de l'application brillante se trouve dans inst/
. Le R/runApp.R
le fichier est défini comme
#' @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")
}
(Vous pouvez le voir en action; par exemple, shinyalert utilise cette structure pour son application de démonstration).
Dans un commentaire, vous avez demandé comment cela peut-il être déployé sur un serveur brillant. C'est simple, vous pouvez simplement avoir un fichier /srv/shiny-server/myapp.app.R
qui appelle et exécute ce package (après avoir installé le package sur le serveur):
dir <- system.file("myapp", package = "mypackage")
setwd(dir)
shiny::shinyAppDir(".")
(Vous pouvez également le voir en action, code ici )
De nombreux packages avec des démonstrations de preuve de concept Shiny ne sont pas conçus pour être déployés sur Shiny Server, mais incluent plutôt quelque chose comme ça dans une fonction destinée à être exécutée à partir de RStudio:
fooRun <- function() {
app <- shinyApp(appUI, appServer)
runApp(app, launch.browser = TRUE, ...)
}
Cette fonction ne fonctionnera pas dans Shiny Server (vous ne pouvez pas exécuter runApp
dans runApp
) mais elle donne quelques indices sur la façon de créer un app.R qui peut agir comme un espace réservé pour utiliser dans /srv/shiny-server/foo/app.R
library("foo")
shinyApp(ui = foo:::appUI, server = foo:::appServer)