如何从rails env检查mysql数据库的存在位置?

Posted

技术标签:

【中文标题】如何从rails env检查mysql数据库的存在位置?【英文标题】:how to check where mysql dababase exists from rails env? 【发布时间】:2013-09-26 16:11:21 【问题描述】:

出于多种原因,我的应用程序必须与多个数据库一起使用。我致力于建立数据库连接的自定义模型,我需要基于 arg 建立新的数据库连接,. 因此,例如,在建立新连接之前使用:

ActiveRecord::Base.establish_connection new_config 

new_config 是 database.yml 的自定义克隆

我想在建立任何数据库连接之前检查是否存在新数据库。所以我需要一个函数db_exists? db_name,它会根据 db 是否存在返回布尔值。

【问题讨论】:

【参考方案1】:

能够在没有连接到该数据库的情况下检查数据库是否存在似乎有点不合逻辑,但这可能只是我。

我建议您考虑使用救援块来尝试连接,然后处理适当的异常。

在here 讨论您可以从该尝试中收到的异常。

刚刚遇到一个关于使用救援here 的非常好的讨论。

【讨论】:

【参考方案2】:

我们使用 Rails 应用程序自己管理数据库,所以必须一直做这样的事情。除了当前的 Rails 数据存储之外,想了解数据库是完全合理的。这很像检查是否存在不属于当前 Rails 应用程序的文件。

这是一个在某些情况下可能有用的解决方案(这适用于 mysql):

def db_exists?(db_name)
  ActiveRecord::Base.connection.execute("SHOW DATABASES LIKE '#db_name'").size > 0
end

你必须有一些数据库连接,但它当然不一定是你要查询的数据库。 (请注意,此实现不受 sql 注入保护...它只需要您传入干净、有效的 db_name。)

【讨论】:

以上是关于如何从rails env检查mysql数据库的存在位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Rails 中访问 Rack 环境?

如何在 nginx、passenger 和 redmine 中使用不同的 rails_env

Rails - 致命:数据库“myapp_development”不存在

Rails帮助程序检查您是否处于开发模式。

在 Rails 中如何在使用 javascript_include_tag 之前检查 javascript 文件是不是存在

Rails Rake ENV 变量始终为空