如何检查 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)