如何将数据从postgresql数据库提取到我的shinyapps.io

时间:2015-05-10 14:19:15

标签: r postgresql shiny-server

闪亮的apps.io中闪亮的应用程序可以链接到我的postgresql数据库吗?我试过但它给了我错误这里是我的代码它脱机工作但我不能在闪亮的apps.io启动它

这是错误

  

DONE上传应用程序包... DONE部署应用程序:   42170 ...等待任务:32473560错误:解析清单

     ############################开始日志#################### ##############      #############################结束日志################### ################错误:未处理的异常:子任务32473561失败:解析清单时出错:不支持的语言环境:      

4409_4409.UTF-8

我的简短版本的server.r

library(e1071)
library(cluster)
set.seed(123)
shinyServer(function(input, output) {

  library("RPostgreSQL")
  drv <- dbDriver("PostgreSQL")
  con <- dbConnect(drv, host='localhost', port='5432', dbname='TESTDB',
                   user='postgres', password='root')
  rk <- dbSendQuery(con,"select * from persons")
  rs<-fetch(rk)

  radioValues <- reactive({
    gender <- input$gender
    if (gender==1){
      rs[rs$gender=="male",]
    } else if (gender==2){
      rs[rs$gender=="female",]
    } else if (gender==3){
      rs
    }

  })

  selectedData <- reactive({
    radioValues()[,input$show_vars, drop = FALSE]

  })
   output$mytable = renderDataTable({
   selectedData()
  })


  dbDisconnect(con)  
})

ui.r

library(shiny)
palette(c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
          "#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999"))

library("RPostgreSQL")
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host='localhost', port='5432', dbname='TESTDB',
                 user='postgres', password='root')
rk <- dbSendQuery(con,"select * from persons")
rs<-fetch(rk)

shinyUI(pageWithSidebar(
  headerPanel(h1("Clustering Process Dashboard",style='font-family:"Times New Roman", Times, serif')),
  sidebarPanel(
    checkboxGroupInput('show_vars', 'Select Big 5 features',names(rs)[c(-1,-2)], selected = names(rs)[c(-1,-2,-3,-9)]),
  ),
  mainPanel(

    tabsetPanel(
      tabPanel("Table", dataTableOutput('mytable'))
  )
  )
)
)
dbDisconnect(con) 

请注意,我不发布我的完整代码,我只是发布有关该问题的代码。这是我的最后一年项目,所以如果你想要我的完整代码,请联系我。我希望你能理解我对此的关注。因此,如果您在此代码中的任何位置发现错误,我会提前道歉。

1 个答案:

答案 0 :(得分:2)

是的,有可能。我有一个具有此配置的应用程序(托管在shinyapps.io上并保存/从Postgresql数据库中提取数据)。

但是,根据您指出的当前配置,它将无效。原因如下:您在自己的个人计算机上运行postgresql服务器(host = localhost)。当您在开发应用程序时(在R Studio中)运行应用程序,它的工作原理是因为R studio中内置的本地shinyapps服务器也在本地计算机上运行。当您将应用程序部署到shinyapps.io时,您的数据库连接字符串仍然指定host =“localhost” - 但是当它在线部署时,localhost引用shinyapps.io上的本地服务器;并且该服务器未运行Postgresql数据库。因此,您收到了错误。

要使其工作并按照您的指定连接到“我的postgresql数据库”,您需要将主机从“localhost”更改为您的个人IP地址。这也意味着您需要将本地计算机打开到Internet,以及运行postgresql的端口。您可以通过配置路由器(如果是个人互联网设置)来执行此操作。由于许多原因,这不是一个理想的解决方案,尤其是shinyapps.io上的应用只能在您的本地计算机运行并且在指定的IP地址连接到互联网时才能运行。

更好的解决方案是设置基于云的Postgresql托管解决方案。许多公司提供此服务(通常是收费的)。 Amazon Web Services为小型数据库提供了为期12个月的免费入门解决方案。这是指向帮助页面的链接,您还可以从中探索他们的服务:http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToPostgreSQLInstance.html

有相当多的设置/注册步骤,但也可以轻松点击菜单并快速启动并运行实例。在云上安装实例后,您需要将数据库连接信息更新到云端。从那里,您的shinyapps.io实例可以在线服务器与数据库云服务器之间可靠地进行通信。然后,当您对应用程序和数据库进行更改时,您需要双重部署更新:一次更新部署到shinyapps.io,并在需要时更新数据库实例。请注意保护在/或本地计算机上输入的数据,而不是通过部署的应用程序保存数据到云服务器。