在闪亮的应用程序中运行git pull

时间:2017-12-17 16:28:44

标签: r git shiny bitbucket

我在Ubuntu 16.04 EC2实例上有一个闪亮的应用程序,我希望能够通过webhook更新它,当有一个推动回购。所以我设置了另一个闪亮的应用程序来接收webook。我知道通过一个闪亮的应用程序执行此操作非常远远不是最佳的,但我只是希望现在能够获得一些东西,然后我会稍后回来找一个更好的解决方案。

所以我将webhook设置为请求某个网址,但目前这并不重要。我在加载页面时遇到的问题是该应用无法通过git pull(或system2运行system。用户闪亮可以成功运行git pull,并且还可以通过R解释器中的git pullsystem2命令成功运行system

这是应用程序的样子:

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)

加载页面时

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

有什么我不能解释Shiny服务器的运行方式吗?我的ssh密钥存储在keychainssh-agent,因此不应该成为问题。我相信,权限在app.R文件和repo上是正确的(闪亮是两者的所有者和组,并且再次,可以从shell和R解释器执行repo上的git pull )。

我猜测它与Shiny服务器及其访问/home/shiny/.ssh文件夹的能力有什么关系?

1 个答案:

答案 0 :(得分:0)

您可以通过在窗口中打印信息来明确检查用户。

如果您运行的是default configuration Shiny Server,那么您将在/srv/shiny-server目录下提供任何应用。

尝试将其放入/srv/shiny-server/test-repo-pull/app.R,然后从<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)

请注意,您不应在由Shiny Server运行的应用程序中执行setwd,而应明确处理文件的任何临时处理(如果需要)。

更有可能这是与没有public SSH key configured with BitBucket相关的权限问题,您是否已将主目录配置为在/etc/shiny-server/shiny-server.conf(而不是用户shiny)中作为其所有者用户运行?< / p>