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

m33*_*lky 40 ruby configuration ruby-on-rails

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

tsh*_*rif 60

Rails.configuration.database_configuration
Run Code Online (Sandbox Code Playgroud)

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

Rails.configuration.database_configuration["development"]["database"]
Run Code Online (Sandbox Code Playgroud)

  • 要获取当前数据库配置:`Rails.configuration.database_configuration [Rails.env]` (25认同)
  • 如果有人在代码库中的任何位置添加以下内容,database_configuration 将不会为您提供正在使用的数据库:`ActiveRecord::Base.connection.execute("USE bleh")` 这将:`ActiveRecord::Base.connection.current_database` (3认同)

iGE*_*GEL 53

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

ActiveRecord::Base.connection.current_database
Run Code Online (Sandbox Code Playgroud)

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

User.connection.current_database
Run Code Online (Sandbox Code Playgroud)

  • 这也是一个更好的答案,因为简单的 `ActiveRecord::Base.connection.execute("USE bleh")` 会使读取数据库配置变得毫无意义。 (2认同)

小智 16

从 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]
Run Code Online (Sandbox Code Playgroud)


小智 9

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

ActiveRecord::Base.connection.raw_connection.conninfo_hash
Run Code Online (Sandbox Code Playgroud)

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