我在database.yml
中配置了2个读副本,我想避免Ruby on Rails应用程序中的任何写操作。
当设置database_tasks: false
时,引发了以下异常:
/.rvm/gems/ruby-3.2.2/gems/activerecord-7.1.1/lib/active_record/railtie.rb:151:in `block (3 levels) in <class:Railtie>':
undefined method `name' for nil:NilClass (NoMethodError)
in db_config.name
字符串database_task
是不推荐使用还是版本升级后有一些bug?
数据库.yml
service_read_replica_defaults: &service_read_replica_defaults
adapter: postgresql
username: root
password: <%= nil %>
host: localhost
port: <%= 5432 %>
database: <%= "service_#{Rails.env}") %>
database_tasks: false
patient_read_replica_defaults: &patient_read_replica_defaults
adapter: mysql2
username: root
password: <%= nil %>
host: <%= localhost %>
port: 3306
database: <%= "patient_#{Rails.env}") %>
database_tasks: false
production:
service_read_replica:
<<: *service_read_replica_defaults
patient_read_replica:
<<: *patient_read_replica_defaults
development:
service_read_replica:
<<: *service_read_replica_defaults
patient_read_replica:
<<: *patient_read_replica_defaults
test:
service_read_replica:
<<: *service_read_replica_defaults
patient_read_replica:
<<: *patient_read_replica_defaults
型
有两个外部数据库(postgresql和mysql)希望以只读访问方式连接。我想使用database_task: false
来限制外部数据库上的写操作。
1条答案
按热度按时间ykejflvf1#
这一行导致它返回false,因此db_config被返回为nil。由于database.yml文件只包含副本,并且每个配置中都有database:false,因此最终没有加载配置并返回为nil。因此,错误。我们正在寻找的解决方案是,如果我们在项目中缺少任何配置,或者这个场景被rails本身遗漏了?
仅供参考,错误发生在运行命令 bundle exec rails s 时