我有一个正在运行的闪亮服务器,它连接到 MySQL 数据库。到目前为止工作正常的页面现在给我这个错误:
Error in mysqlNewConnection(drv, ...) : RS-DBI driver:
(cannot allocate a new connection -- maximum of 16 connections already opened)
这让我想知道我应该如何在交互式网页中处理打开的 mysql 连接。
首先,应该dbConnect(MySQL(),...)
声明之前shinyServer
方法还是里面?
如果我添加一个dbDisconnect(dbcon)
在......的最后server.R
,然后我得到一个Error: expired MysqLConnection
页面出现错误,并且不显示任何数据。
我在内部或之前也尝试过这个shinyServer
method:
on.exit(dbDisconnect(dbcon), add=TRUE)
or
on.exit(dbDisconnect(dbcon))
因此,如果我将连接保持打开状态,页面本身的代码仅适用于我,我想这可能会导致上面的最大连接错误。
在Shiny中如何处理这些情况?
您可以在中设置连接global.R
文件或外部shinyServer
一个例子来自https://groups.google.com/forum/#!topic/shiny-discuss/0VjQc2a6z3M https://groups.google.com/forum/#!topic/shiny-discuss/0VjQc2a6z3M is:
library(RMySQL)
getConnection <- function(group) {
if (!exists('.connection', where=.GlobalEnv)) {
.connection <<- dbConnect(MySQL(), group=group)
} else if (class(try(dbGetQuery(.connection, "SELECT 1"))) == "try-error") {
dbDisconnect(.connection)
.connection <<- dbConnect(MySQL(), group=group)
}
return(.connection)
}
这定义了一个检查全局环境中连接的函数。如果没有找到,它会创建一个。如果找到但无法连接,则重新启动连接。没有给出明确的断开连接,所以我猜连接最终会被允许超时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)