2017-12-17 5 views
1

Ich habe eine glänzende App auf einem Ubuntu 16.04 EC2-Instanz und ich möchte in der Lage sein, es über einen Webhook zu aktualisieren, wenn es ein Push zum Repo ist. Also habe ich eine weitere glänzende App eingerichtet, um das Webook zu erhalten. Ich weiß, dass dies durch eine glänzende App zu tun ist sehr viel weniger als optimal, aber ich möchte nur etwas in Gang bringen, und dann komme ich später mit einer besseren Lösung zurück.Running Git ziehen in Shiny App

Also habe ich den Webhook gesetzt, um eine bestimmte URL anzufordern, aber momentan ist das egal. Das Problem, das ich beim Laden der Seite habe, ist, dass die App git pull über system2 (oder system für diese Angelegenheit) nicht ausführen kann. Der Benutzer glänzend kann git pull erfolgreich ausführen, und es kann auch git pull über einen system2 oder system Befehl im R-Interpreter erfolgreich ausgeführt werden.

Hier ist, was die App wie folgt aussieht:

library(shiny) 

setwd("/home/shiny/myrepo") 
result <- system2("git", "pull", stdout = TRUE, stderr = TRUE) 

ui <- bootstrapPage(
     textOutput("result") 
) 


# Define the server code 
server <- function(input, output) { 
     output$result <- renderText(result) 
} 

# Return a Shiny app object 
shinyApp(ui = ui, server = server) 

Wenn ich die Seite laden

Permission denied (publickey). 
fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 

Gibt es etwas, das ich nicht für Buchhaltung mit, wie Shiny-Server läuft? Mein SSH-Schlüssel ist in keychain mit einem ssh-agent gespeichert, so dass kein Problem sein sollte. Die Berechtigungen sind korrekt, glaube ich, in der App.R-Datei und dem Repo (glänzend ist der Besitzer und die Gruppe auf beiden, und wiederum kann die git pull auf dem Repo von der Shell und vom R-Interpreter durchführen).

Ich vermute, es ist etwas mit Shiny Server und seine Fähigkeit, den /home/shiny/.ssh Ordner zugreifen zu tun?

Antwort

0

Sie können den Benutzer explizit überprüfen, indem Sie die Informationen im Fenster drucken.

Wenn Sie einen von Shiny Server ausführen, werden Sie alle Anwendungen unter dem Verzeichnis /srv/shiny-server aufspielen.

Versuchen Sie dies in /srv/shiny-server/test-repo-pull/app.R setzen, den Zugriff dann von <your-host>:3838/test-repo-pull:

library("shiny") 

ui <- bootstrapPage(
    actionButton("pull", "Pull Master Branch"), 
    verbatimTextOutput("result"), 
    tableOutput("user") 
) 

server <- function(input, output) { 

    result <- eventReactive(input$pull, { 
    system2("git", "pull origin master", stdout = TRUE, stderr = TRUE) 
    }) 

    output$user <- renderTable({ 
    info <- Sys.info() 
    data.frame(variable = names(info), values = unname(info)) 
    }) 

    output$result <- renderPrint({ 
    result() 
    }) 

} 

shinyApp(ui, server) 

Beachten Sie, dass Sie sollten nicht setwd in Anwendungen werden ausgeführt werden, die von Shiny Server ausgeführt werden, sondern behandeln jede temporäre Handhabung Ihrer Dateien explizit (wenn benötigt).

Wahrscheinlicher ist dies ein Berechtigungen im Zusammenhang Problem nicht Ihre public SSH key configured with BitBucket hat, haben Sie konfiguriert Home-Verzeichnisse in /etc/shiny-server/shiny-server.conf als ihre Besitzer Benutzer auszuführen (statt Benutzer shiny)?

+0

Zunächst einmal, danke für Ihre Krawatte für eine detaillierte Antwort. Ich habe überprüft, dass der Benutzer glänzend ist. Der glänzende Benutzer hat den Schlüssel im Ordner .ssh/und er ist der richtige Schlüssel, da er in der Lage ist, zu drücken, wenn ich als dieser Benutzer auf dem Server angemeldet bin. Ich kann sogar R ausführen und von R entweder über system2 oder das git2r-Paket als ** shiny ** -Benutzer pushen. Es ändert sich also etwas, sobald der Server glänzend ausgeführt wird. – hendiatris

+0

Was passiert, wenn Sie ein 'git init' im Verzeichnis ausführen, in dem die App läuft, und' git remote den Ursprungs-Master 'anstelle des Befehls' -C' setzen? Wenn Sie gerade dabei sind, können Sie Ihre Frage mit Ihrem Betriebssystem aktualisieren? – mlegge

+0

Zum Beispiel: '> system2 (" git "," -C/home/glänzend/myrepo pull Ursprung Master ", stdout = T, stderr = T) [1]" Von bitbucket.org: me/myrepo " [2]" * Zweig-Master -> FETCH_HEAD " [3]" Bereits aktuell. "' Aber läuft im Wesentlichen die gleiche Sache auf dem Server gibt mir: '[1 ] "Berechtigung verweigert (publickey). \ R" [2] "fatal: Konnte nicht aus dem Remote-Repository lesen." ' – hendiatris