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

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

【问题讨论】:

    标签: ruby-on-rails ruby configuration


    【解决方案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
          • 非常感谢,对我帮助很大。
          猜你喜欢
          • 2012-07-06
          • 2012-04-16
          • 2011-09-11
          • 1970-01-01
          • 2017-01-13
          • 1970-01-01
          • 2014-09-09
          • 1970-01-01
          • 2011-05-19
          相关资源
          最近更新 更多