78

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

4

6 回答 6

111
Rails.configuration.database_configuration

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

Rails.configuration.database_configuration["development"]["database"]
于 2012-04-03T21:27:30.093 回答
81

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

ActiveRecord::Base.connection.current_database

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

User.connection.current_database
于 2016-11-04T15:45:04.710 回答
11

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

ActiveRecord::Base.connection.raw_connection.conninfo_hash

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

于 2019-06-02T16:25:15.693 回答
7

从 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]
于 2021-03-22T15:24:00.880 回答
2

要利用 tsherif 的评论,您可以在 rails 控制台 (rails c) 中运行 Rails.configuration 命令来获取数据库名称。

于 2016-08-16T00:59:41.293 回答
2

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

db_name="$(bundle exec rails runner "puts ActiveRecord::Base.connection.current_database")"
于 2020-12-02T23:02:30.720 回答