R 根据会话$clientData$主机名(即本地或非本地)更改数据库池用户

R 根据会话$clientData$主机名(即本地或非本地)更改数据库池用户,r,shiny,database-connection,pool,dbplyr,R,Shiny,Database Connection,Pool,Dbplyr,通常,在开发连接到数据库的闪亮应用程序时,如果应用程序是本地/服务器上的,则需要使用不同的用户名 数据库连接的pool方法是最有效的(),但在shinyServer函数之外调用到数据库的连接[根据建议]意味着不能使用session$clientData$url\u hostname 我想制作一个闪亮的应用程序,实现以下目标: 使用由应用程序是否在127.0.0.1上运行决定的用户名启动数据库池 显示行到行显示表格的行,行到行显示由滑块put设置 使用rsconnet()运行/部署应用程序的方

通常,在开发连接到数据库的闪亮应用程序时,如果应用程序是本地/服务器上的,则需要使用不同的用户名

数据库连接的
pool
方法是最有效的(),但在
shinyServer
函数之外调用到数据库的连接[根据建议]意味着不能使用
session$clientData$url\u hostname

我想制作一个闪亮的应用程序,实现以下目标:

  • 使用由应用程序是否在127.0.0.1上运行决定的用户名启动数据库池

  • 显示行到行显示表格的行,行到行显示由
    滑块put设置

使用rsconnet()运行/部署应用程序的方法就足够了

## ui.R
shinyUI(fluidPage(
  sliderInput(
    "rows_to_show",
    "Exponent",
    min = 10,
    max = 50,
    value = 5
  ),
  dataTableOutput("table")
))


## server.R
library("shiny")
library("tidyverse")
library("dbplyr")
library("pool")
library("RMySQL")
## tryCatch so the app will actually run
tryCatch(
  the_db <- dbPool(
    drv = RMySQL::MySQL(),
    dbname = "the_db",
    port = 3306,
    host = "163.1.169.xxx",
    user = "database_username" 
  ),
  error = function(e)
    e
)

shinyServer(function(input, output, session) {
  database_username <- eventReactive(input$exponent,
                                     {
                                       if (session$clientData$url_hostname == "127.0.0.1") {
                                         "local_username"
                                       } else {
                                         "remote_username"
                                       }
                                     }, ignoreInit = FALSE)


  output$table <- renderDataTable({
    rows_to_show <- as.numeric(input$rows_to_show)

    # the_db %>%
    #   tbl("my_table") %>%
    #   collect() %>%
    #   slice(1:rows_to_show)
    iris %>%
      slice(1:rows_to_show)

  })

})
##ui.R
shinyUI(fluidPage)(
滑音输入(
“行到行显示”,
“指数”,
最小值=10,
最大值=50,
值=5
),
dataTableOutput(“表”)
))
##服务器.R
图书馆(“闪亮”)
图书馆(“tidyverse”)
图书馆(“dbplyr”)
图书馆(“池”)
库(“RMySQL”)
##tryCatch以便应用程序实际运行
tryCatch(
_db%
切片(1:行到显示)
})
})

我遇到的正是这种情况。我需要根据应用程序的部署位置改变主机名(我们将应用程序部署到dev、stage和prod)。此外,在将来的某个时候,我们还需要根据访问应用程序的用户传递sql凭据@马丁,你明白了吗?我遇到的正是这种情况。我需要根据应用程序的部署位置改变主机名(我们将应用程序部署到dev、stage和prod)。此外,在将来的某个时候,我们还需要根据访问应用程序的用户传递sql凭据@马丁,你明白了吗?