2016-06-15 18 views
17

Sto sviluppando un'app lucida e poiché volevo utilizzare test automatici e documentazione della funzione, ho iniziato a sviluppare l'interfaccia all'interno di un pacchetto (come consigliato here).sviluppo di un'app lucida come pacchetto e distribuzione su server lucido

ho sviluppare questa applicazione lucido all'interno RStudio e ho un file di server.R cui posso fare clic sul pulsante Esegui Appall'interno RStudio e tutto funziona. Applico il mio pacchetto a un repository github e da questo punto voglio installarlo sul mio server lucido R usando la funzione devtools e install_github.

Ora mi chiedo come avviare la mia app all'interno del server. Stavo ingenuamente pensando di installare il pacchetto e puntare al file server.R, ma in qualche modo non funziona. Non sono sicuro dove sono i problemi.

Il mio secondo tentativo è stato la creazione di un file chiamato app.R in una cartella accessibile dal server lucido e in questo file ho praticamente carico mio pacchetto, pacchetti necessari lucide e altri, ma lamenta qualche modo a causa delle variabili mancanti ...

Qualcuno può darmi un consiglio? Sono anche felice di rispondere a qualsiasi domanda poiché non sono sicuro di come chiedere correttamente questo problema. Grazie in anticipo.

EDIT Distribuzione su server di lucido

Dal Colin D chiedeva nei commenti, come distribuire questi pacchetti sul server lucido, ho voluto dimostrare come faccio questo.

Prima di tutto installo il mio pacchetto sul server lucido direttamente tramite la riga di comando come root con il seguente comando.

su - -c "R -e \"devtools::install_github('user/shinypackage')\"" 

Il passo successivo è quello di cambiare il proprietario della cartella del pacchetto

chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/ 

Poi riavviare il server lucido dato che questa era a volte problematico con il caching o giù di lì.

systemctl restart shiny-server 

Questi sono i passaggi che faccio quando aggiorno la mia app lucida. Lo faccio di nuovo normalmente come root in una sola riga

su - -c "R -e \"devtools::install_github('user/shinypackage')\"" & chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/ & systemctl restart shiny-server 

Una cosa abbiamo ancora bisogno di fare è quello di impostare la directory del file shiny-server.conf. Ho appena aggiunto il percorso del pacchetto + la directory dell'applicazione in cui sono stati salvati i valori ui.R e server.R.

location /shinypackage { 
    app_dir /usr/local/lib/R/site-library/shinypackage/application; 
    log_dir /var/log/shiny-server; 
    } 

allora devo riavviare il server nuovamente utilizzando systemctl restart shiny-server.

Questo è in uso su un server Ubuntu.

+0

Faccio questo come una questione di routine. Inserisco i miei file app nella directory 'inst' del pacchetto e includo una funzione chiamata 'launch_application' che chiama semplicemente' runApp' con i miei argomenti predefiniti. I file dell'app si trovano tramite 'system.file' – Benjamin

+0

Suoni come quello che sto cercando. Quali file sono nella cartella 'inst' allora? Solo la chiamata della funzione 'launch_application' e la chiamata' library'? Dato che ho inserito ciascuna funzione in un file aggiuntivo nella cartella 'R', speravo di poterli esportare e caricare il mio pacchetto ... – drmariod

risposta

15

Quando faccio le applicazioni lucide come un pacchetto autonomo, di solito organizzare i file come così:

Nella directory R:

  • Tutti i miei metodi per supportare l'applicazione (questi dovrebbero essere esportati se saranno utilizzati in entrambi i file ui.R, server.R, o global.R)
  • Un launch_application funzione

La definizione di launch_application è simile a:

launch_application <- function(x, ...) 
{ 
    shiny::runApp(appDir = system.file("application", package = [my_pkg]), 
       ...) 
} 

Nella directory inst

  • application/server.R
  • application/ui.R
  • application/global.R

Dopo la costruzione e l'installazione del pacchetto, ho quindi solo bisogno di eseguire

library(my_pkg) 
launch_application(...) 
+0

Ahhh, ora ho capito ... Quindi' server.R' e 'ui. R' entra nella cartella 'application' e solo le mie funzioni restano nella cartella' R'. Darei un tentativo però ... – drmariod

+0

Forse una domanda più specifica ... Sto usando 'DT :: renderDataTable' nel mio file server. Dove devo caricare effettivamente la libreria? Prima stavo mettendo 'DT' come dipendenza nel mio file' DESCRIPTION', ora, da quando ho spostato il 'server.R' nella directory dell'applicazione, mentre mi sono lamentato del pacchetto, non uso tutte le dipendenze. – drmariod

+1

Elenca 'DT' sotto' Suggests' e dovresti stare bene. – Benjamin

Problemi correlati