我有一个 Shiny 应用程序(托管在 shinyapps.io 上),它将用户对某些操作按钮的点击记录到 MySQL 数据库中。我希望就以下几点提出一些建议:
- 放置
dbConnect
代码的位置(即在shinyServer
函数内部或外部) - 何时关闭连接(因为我遇到了打开连接太多的问题)
每次添加到数据库中只会添加一个新行,因此用户不会访问和修改相同的元素。我问这个的原因是我遇到了多个用户无法同时使用该应用程序的问题(错误“与服务器断开连接”),我不确定它是否来自 MySQL 连接。
谢谢!
最佳答案
有人在评论中发布了有关 pool
包的信息,正是为了这个目的!这是我的 server.R
代码的相关部分:
library(shiny)
library(RMySQL)
library(pool)
pool <- dbPool(
drv = RMySQL::MySQL(),
user='username',
password='password',
dbname='words',
host='blahblahblah')
shinyServer(function(input, output) {
## function to write to databse
writeToDB <- function(word, vote){
query <- paste("INSERT INTO word_votes (vote, word) VALUES (", vote, ", '", word, "');", sep="")
conn <- poolCheckout(pool)
dbSendQuery(conn, query)
conn <- poolReturn(conn)
## rest of code
}
我添加了 poolCheckout
和 poolReturn
以成功运行并防止泄漏。
关于mysql - R Shiny 中的多个(同时)用户可以访问 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40471725/