【发布时间】:2012-04-17 14:21:21
【问题描述】:
在 database.yml 中定义所有设置。如何从 ruby 访问这些设置?我查看了App::Application::config,但在那里找不到。另外,我记得人们可以在没有 yaml 的情况下配置数据库设置,有人知道怎么做吗?
【问题讨论】:
标签: ruby-on-rails ruby configuration
在 database.yml 中定义所有设置。如何从 ruby 访问这些设置?我查看了App::Application::config,但在那里找不到。另外,我记得人们可以在没有 yaml 的情况下配置数据库设置,有人知道怎么做吗?
【问题讨论】:
标签: ruby-on-rails ruby configuration
从 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]
【讨论】:
如果您想获取数据库名称以在 bash 或 shell 脚本中使用,请使用以下命令:
db_name="$(bundle exec rails runner "puts ActiveRecord::Base.connection.current_database")"
【讨论】:
获取更多信息的另一种方法是使用数据库特定的连接信息方法。例如,如果您使用的是 postgresql,您可以通过以下方式获取当前数据库连接的详细信息:
ActiveRecord::Base.connection.raw_connection.conninfo_hash
这将提供更多连接细节,而不仅仅是那些与默认值不同的细节。
【讨论】:
在 Rails 4.2 中,您可以这样做:
ActiveRecord::Base.connection.current_database
您还可以向特定模型询问他们的数据库(因为每个模型可以使用不同的数据库):
User.connection.current_database
【讨论】:
ActiveRecord::Base.connection.execute("USE bleh") 会使从数据库配置中读取毫无意义。
User.connection.config 似乎也适用于我的情况,并打印出一堆其他有用的信息。
ActiveRecord::Base.connection.current_database
要从 tsherif 搭载 cmets,您可以在 rails 控制台 (rails c) 中运行 Rails.configuration 命令来获取数据库名称。
【讨论】:
Rails.configuration.database_configuration
这将为您提供一个哈希表,其中包含每个环境的配置。例如。获取您的开发数据库名称:
Rails.configuration.database_configuration["development"]["database"]
【讨论】:
Rails.configuration.database_configuration[Rails.env]
ActiveRecord::Base.connection.execute("USE bleh") 这将:ActiveRecord::Base.connection.current_database