使用 rails 配置多个数据库
Configuration for multiple databases with rails
A Rails 7.0.3 应用程序具有以下 database.yml 配置,默认块由 rails 应用程序初始化过程生成。
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
primary:
database: user_development
username: deploy_root
password: password
host: "localhost"
migrations_paths: db/user_migrate
primary_replica:
database: user_development
username: deploy_readonly
password: password
host: "localhost"
replica: true
forum:
database: forum_development
username: deploy_root
password: password
host: "localhost"
migrations_paths: db/forum_migrate
forum_replica:
database: forum_development
username: deploy_readonly
password: password
host: "localhost"
replica: true
office:
database: office_development
username: deploy_root
password: password
host: "localhost"
migrations_paths: db/office_migrate
test:
<<: *default
primary:
database: user_test
username: deploy_root
primary_replica:
database: user_test
username: deploy_readonly
forum:
database: forum_test
username: deploy_root
forum_replica:
database: forum_test
username: deploy_readonly
office:
database: office_test
username: deploy_root
<<: *default
primary:
host: 'primary.domain.ws'
username: deploy_root
password: [omiss]
database: user_production
pool: 50
timeout: 5000
primary_replica:
host: 'replica.domain.ws'
username: deploy_readonly
password: [omiss]
database: user_production
pool: 50
timeout: 5000
replica: true
forum:
database: forum_production
username: deploy_root
password: [omiss]
host: 'forum.domain.ws'
migrations_paths: db/forum_migrate
forum_replica:
database: forum_production
username: deploy_readonly
password: [omiss]
host: 'forumreplica.domain.ws'
replica: true
office:
database: office_production
username: deploy_root
password: [omiss]
host: 'office.domain.ws'
migrations_paths: db/office_migrate
然而,在 运行 bin/rails db:create
应用程序抱怨
no implicit conversion of nil into String
Couldn't create '' database. Please check your configuration.
语法是在其他 rails 7 个应用程序中使用的语法,尽管不在 partnet/replica 上下文和 seems to respect the rails guides 指南中。
上面的字符串被解释为 nil 有什么问题?
更新
如果开发块改成
development:
<<: *default
database: office_development
username: deploy_root
password: password
host: "localhost"
migrations_paths: db/office_migrate
primary:
[...]
已创建默认数据库,但未创建主数据库和副本数据库。因此 YAML 结构存在问题,尽管它成功地进行了 lints。
需要删除对共享属性的调用 <<: *default
。
这将允许处理开发数据库。
属性
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
被添加到每个块。
另一个 hang-up 是测试数据库,副本:
primary_replica:
database: user_test
username: deploy_readonly
forum_replica:
database: forum_test
username: deploy_readonly
需要删除才能完成该过程。 我推测假设从主副本读取的对象与从副本读取的对象完全相同,因此这是过度的
A Rails 7.0.3 应用程序具有以下 database.yml 配置,默认块由 rails 应用程序初始化过程生成。
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
primary:
database: user_development
username: deploy_root
password: password
host: "localhost"
migrations_paths: db/user_migrate
primary_replica:
database: user_development
username: deploy_readonly
password: password
host: "localhost"
replica: true
forum:
database: forum_development
username: deploy_root
password: password
host: "localhost"
migrations_paths: db/forum_migrate
forum_replica:
database: forum_development
username: deploy_readonly
password: password
host: "localhost"
replica: true
office:
database: office_development
username: deploy_root
password: password
host: "localhost"
migrations_paths: db/office_migrate
test:
<<: *default
primary:
database: user_test
username: deploy_root
primary_replica:
database: user_test
username: deploy_readonly
forum:
database: forum_test
username: deploy_root
forum_replica:
database: forum_test
username: deploy_readonly
office:
database: office_test
username: deploy_root
<<: *default
primary:
host: 'primary.domain.ws'
username: deploy_root
password: [omiss]
database: user_production
pool: 50
timeout: 5000
primary_replica:
host: 'replica.domain.ws'
username: deploy_readonly
password: [omiss]
database: user_production
pool: 50
timeout: 5000
replica: true
forum:
database: forum_production
username: deploy_root
password: [omiss]
host: 'forum.domain.ws'
migrations_paths: db/forum_migrate
forum_replica:
database: forum_production
username: deploy_readonly
password: [omiss]
host: 'forumreplica.domain.ws'
replica: true
office:
database: office_production
username: deploy_root
password: [omiss]
host: 'office.domain.ws'
migrations_paths: db/office_migrate
然而,在 运行 bin/rails db:create
应用程序抱怨
no implicit conversion of nil into String
Couldn't create '' database. Please check your configuration.
语法是在其他 rails 7 个应用程序中使用的语法,尽管不在 partnet/replica 上下文和 seems to respect the rails guides 指南中。
上面的字符串被解释为 nil 有什么问题?
更新 如果开发块改成
development:
<<: *default
database: office_development
username: deploy_root
password: password
host: "localhost"
migrations_paths: db/office_migrate
primary:
[...]
已创建默认数据库,但未创建主数据库和副本数据库。因此 YAML 结构存在问题,尽管它成功地进行了 lints。
需要删除对共享属性的调用 <<: *default
。
这将允许处理开发数据库。
属性
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
被添加到每个块。
另一个 hang-up 是测试数据库,副本:
primary_replica:
database: user_test
username: deploy_readonly
forum_replica:
database: forum_test
username: deploy_readonly
需要删除才能完成该过程。 我推测假设从主副本读取的对象与从副本读取的对象完全相同,因此这是过度的