【问题标题】:How to pull data from postgresql database to my shinyapps.io如何从 postgresql 数据库中提取数据到我的 shinyapps.io
【发布时间】:2015-07-21 01:26:09
【问题描述】:

shiny 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) 

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

【问题讨论】:

  • 除非您知道运行 Shiny 实例的 shinyapps.io 服务器的 IP 地址以及用户身份,否则您无法执行此操作。您必须管理 Postgres 实例的权限,以允许从该 IP 地址和该用户读取。非常气馁。

标签: r postgresql shiny-server


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2012-03-02
    相关资源
    最近更新 更多