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

how to check where mysql dababase exists from rails env?

我的应用程序必须使用多个数据库,原因有很多。 我在数据库连接建立的自定义模型上工作,我需要根据arg建立新的数据库连接。
因此,例如,在使用以下方法建立新连接之前:

1
ActiveRecord::Base.establish_connection new_config

其中new_config是自定义的clone,of database.yml

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


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

我建议您考虑使用rescue块来尝试连接,然后处理相应的异常。

此处将讨论您可以从该尝试中获得的例外情况。

刚刚在这里讨论了使用救援的问题。


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

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

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

您必须拥有一些数据库连接,但它肯定不一定是您要查询的数据库存在。 (注意,这个实现不受sql注入保护......它要求你只传入干净,有效的db_name。)