通常在开发连接到数据库的 Shiny 应用程序时,当应用程序位于本地/服务器上时,需要使用不同的用户名。
数据库连接的pool
方法是最有效的(https://shiny.rstudio.com/articles/pool-dplyr.html),但是在函数之外调用与数据库的连接shinyServer
[推荐]意味着不能使用session$clientData$url_hostname
我想做一个闪亮的应用程序,实现以下目标:
使用由应用程序是否在 127.0.0.1 上运行决定的用户名启动数据库池
显示表的 rows_to_show 行,其中 rows_to_show 由 a 设置
sliderInput
使用 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)
})
})