我正在试验rails 7 多数据库分片,我希望能够设置rails控制台会话的默认碎片。
我可以用
ActiveRecord::Base.connected_to(role: :writing, shard: :default) do
@id = Person.create! # Creates a record in shard default
end但是,对于每个命令来说,这都是相当麻烦的。有什么方法可以从命令行设置它吗,比如
shard=shard_one rails c 发布于 2022-08-03 10:58:42
我将此更改为以下解决方案,因为db:rollback任务无法工作,因为它在读取database.yml时遇到了问题
database.yml
development:
nl:
<<: *default_database
database: <%= ENV.fetch("DATABASE_DATABASE_NL") { Rails.application.credentials.dig(:mysql, :database_nl) } %>
uk:
<<: *default_database
database: <%= ENV.fetch("DATABASE_DATABASE_UK") { Rails.application.credentials.dig(:mysql, :database_uk) } %>并在application.rb中添加以下内容
def config.database_configuration
parsed = super
default_shard = ENV.fetch('DEFAULT_SHARD') { 'nl' }
default_shard_config = { "#{default_shard}": parsed[Rails.env].delete(default_shard) }
parsed[Rails.env] = default_shard_config.merge(parsed[Rails.env])
parsed
end现在,您仍然可以运行DISABLE_SPRING=true DEFAULT_SHARD="uk" rails,但也可以运行bin/rails db:rollback:uk等。
发布于 2022-02-03 14:47:15
最后我像这样侵入了我的database.yml文件
<%= ctrys = ['nl','uk']; main = ENV.fetch('DEFAULT_SHARD'){'nl'}; ctrys.delete(main); ctrys.unshift(main);nil %>
development:
<%= ctrys[0] %>:
<<: *default_database
database: <%= ENV.fetch("DATABASE_DATABASE_#{ctrys[0].upcase}") { Rails.application.credentials.dig(:mysql, :"database_#{ctrys[0]}") } %>
<%= ctrys[1] %>:
<<: *default_database
database: <%= ENV.fetch("DATABASE_DATABASE_#{ctrys[1].upcase}") { Rails.application.credentials.dig(:mysql, :"database_#{ctrys[1]}") } %>我可以这样用它:
~prompt% DISABLE_SPRING=true DEFAULT_SHARD="uk" rails
Loading development environment (Rails 7.0.1)
hvg-web(dev)> ActiveRecord::Base.connection.pool.db_config.name
=> "uk"(spring会缓存它,所以禁用spring)
不过,这一攻击确实给测试跑步者带来了挑战:
/usr/src/app# rspec
Running via Spring preloader in process 2504
Running via Spring preloader in process 2510
Rails couldn't infer whether you are using multiple databases from your database.yml and can't generate the tasks for the non-primary databases. If you'd like to use this feature, please simplify your ERB.感觉很烦躁,但很管用--也许其他人能想出一个更好的计划?
https://stackoverflow.com/questions/70951625
复制相似问题