如何检查 ActiveRecord 使用的数据库名称

Posted

技术标签:

【中文标题】如何检查 ActiveRecord 使用的数据库名称【英文标题】:how to check the database name that ActiveRecord uses 【发布时间】:2012-04-17 14:21:21 【问题描述】:

在 database.yml 中定义所有设置。如何从 ruby​​ 访问这些设置?我查看了App::Application::config,但在那里找不到。另外,我记得人们可以在没有 yaml 的情况下配置数据库设置,有人知道怎么做吗?

【问题讨论】:

【参考方案1】:

从 Rails 6.1 开始,您必须使用 ActiveRecord::Base.connection_db_config。所以你可以访问其他类方法,比如database()

db_config = ActiveRecord::Base.connection_db_config
print db_config.database
# main available methods: [:host, :schema_cache_path, :migrations_paths, :config, :database, :_database=, :checkout_timeout, :reaping_frequency, :idle_timeout, :replica?, :configuration_hash, :adapter, :pool]

【讨论】:

【参考方案2】:

如果您想获取数据库名称以在 bash 或 shell 脚本中使用,请使用以下命令:

db_name="$(bundle exec rails runner "puts ActiveRecord::Base.connection.current_database")"

【讨论】:

【参考方案3】:

获取更多信息的另一种方法是使用数据库特定的连接信息方法。例如,如果您使用的是 postgresql,您可以通过以下方式获取当前数据库连接的详细信息:

ActiveRecord::Base.connection.raw_connection.conninfo_hash

这将提供更多连接细节,而不仅仅是那些与默认值不同的细节。

【讨论】:

【参考方案4】:

在 Rails 4.2 中,您可以这样做:

ActiveRecord::Base.connection.current_database

您还可以向特定模型询问他们的数据库(因为每个模型可以使用不同的数据库):

User.connection.current_database

【讨论】:

这也是一个更好的答案,因为简单的ActiveRecord::Base.connection.execute("USE bleh") 会使从数据库配置中读取毫无意义。 User.connection.config 似乎也适用于我的情况,并打印出一堆其他有用的信息。 你也可以在 Rails 3.2 中做ActiveRecord::Base.connection.current_database【参考方案5】:

要从 tsherif 搭载 cmets,您可以在 rails 控制台 (rails c) 中运行 Rails.configuration 命令来获取数据库名称。

【讨论】:

然后使用 heroku pg:reset DATABASE_URL 实际运行重置,然后按照提示进行操作。【参考方案6】:
Rails.configuration.database_configuration

这将为您提供一个哈希表,其中包含每个环境的配置。例如。获取您的开发数据库名称:

Rails.configuration.database_configuration["development"]["database"]

【讨论】:

获取当前数据库配置:Rails.configuration.database_configuration[Rails.env] 当我尝试输入您的命令时,我收到此错误:“Rails.configuration.database_configuration[development][database]: command not found” - 知道为什么吗? 如果有人在您的代码库中的任何位置添加以下内容,database_configuration 将不会为您提供正在使用的数据库:ActiveRecord::Base.connection.execute("USE bleh") 这将:ActiveRecord::Base.connection.current_database 此答案自 Rails 6.1 起已弃用。我通过新方式解释here 非常感谢,对我帮助很大。

以上是关于如何检查 ActiveRecord 使用的数据库名称的主要内容,如果未能解决你的问题,请参考以下文章

如何存储和比较:ActiveRecord 中的符号(Ruby on Rails)

Rails,ActiveRecord,Squeel:检查数组中是不是存在值

.NET 功能 ORM、DAO、ActiveRecord (CRUD)

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

如何使用 Ruby ActiveRecord 映射数据库视图?

如何在具有名为“属性”的列的数据库上使用 ActiveRecord? (危险属性错误)