【问题标题】:How do I configure database.yml so that rake db:create creates multiple databases?如何配置 database.yml 以便 rake db:create 创建多个数据库?
【发布时间】:2020-08-10 09:40:46
【问题描述】:

我定义了以下 database.yml 配置

adapter_default: &adapter_default
  adapter : mysql2
  encoding: utf8

default: &default
  <<: *adapter_default
  database: <%= Rails.application.secrets.database_name %>
  host    : <%= Rails.application.secrets.database_host %>
  username: <%= Rails.application.secrets.database_user %>
  password: <%= Rails.application.secrets.database_password %>
  port    : <%= Rails.application.secrets.database_port %>

development:
  <<: *default

test:
  <<: *default

staging:
  <<: *default

production:
  <<: *default
  pool: <%= Rails.application.secrets.database_connection_pool_size || 5 %>

read_replica:
  <<: *adapter_default
  database: <%= Rails.application.secrets.replica_database_name %>
  host    : <%= Rails.application.secrets.database_host %>
  username: <%= Rails.application.secrets.database_user %>
  password: <%= Rails.application.secrets.database_password %>
  port    : <%= Rails.application.secrets.database_port %>

但是,当我运行 rake db:create 时,只会创建 Rails.application.secrets.database_name 中定义的数据库。根本没有创建 read_replica 数据库! 但是当我运行 rake db:create:all 时,会创建 read_replica 数据库。但是,我不希望为所有环境创建数据库。 我确信我在我的 database.yml 文件的结构上遗漏了一些东西。 我正在使用 Rails 4.2.6。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rails-activerecord


    【解决方案1】:

    您可以使用

    创建单独的数据库
    RAILS_ENV=staging rake db:create
    

    【讨论】:

    • 嗨!我实际上没有一个名为“read_replica”的环境。我只有“测试”、“开发”、“分期”、“生产”。但是您是否建议我有另一个名为“read_replica”的环境?如果是这样,我将不得不为新环境定义所有参数,如主机、端口等。
    • 根据您问题中的database.yml 文件,这正是您定义的——一个名为read_replica 的环境。 db:create 查找与环境名称匹配的顶级键,并使用该配置创建数据库。因此使用ENV=read_replica 运行它会创建您的副本数据库。
    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2016-05-11
    相关资源
    最近更新 更多