如何从Rails环境中检查MySQL数据库的存在位置?

3

为了满足多种需求,我的应用必须与多个数据库一起使用。我正在编写一个自定义的数据库连接模型,在这个模型中,我需要根据参数建立新的数据库连接。

因此,比如在建立新连接之前:

ActiveRecord::Base.establish_connection new_config 

在任何数据库连接建立之前,我想要检查新的数据库是否存在。因此,我需要一个名为db_exists? db_name的函数,它将基于数据库是否存在返回布尔值,其中new_config是定制化的database.yml克隆。

2个回答

2
似乎有点不合逻辑,能够在没有与数据库建立连接的情况下检查数据库是否存在,但这可能只是我的个人看法。
我建议您考虑使用 rescue 块来尝试连接,然后处理相应的异常。
您可以从该尝试中收到的异常在此处讨论
刚刚遇到了一个非常好的关于使用 rescue 的讨论此处

1
我们使用Rails应用程序来管理数据库本身,因此经常需要执行此类操作。希望了解当前Rails数据存储以外的数据库是完全合理的。这很像检查当前Rails应用程序中不属于文件的存在情况。
以下是一种可能在某些情况下有用的解决方案(针对MySQL):
def db_exists?(db_name)
  ActiveRecord::Base.connection.execute("SHOW DATABASES LIKE '#{db_name}'").size > 0
end

您需要建立一些数据库连接,但它并不一定是用于查询存在的数据库。(请注意,此实现未受到SQL注入的保护...它要求您只传递干净、有效的db_name。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接