我们正在使用AWS SecretsManager(SM)来存储Rails应用程序的旋转数据库密码。但是,当SM旋转密码时,我们会收到“致命错误:用户的密码验证失败”。
密码在database.yml中读取
password: '<%= AwsSecretService.new.get_db_pwd(ENV['DATABASE_USERNAME']) if Rails.env.production? %>'
问题似乎是ActiveRecord在初始化时正在从database.yml缓存数据库凭据,而不重新解析database.yml。
我的想法是以某种方式捕获身份验证失败的错误并重新初始化ActiveRecord。使用以下命令:
ActiveRecord::Base.establish_connection(::Rails.application.config.database_configuration[::Rails.env])
我不确定如何捕获错误。因为所有activerecord模型都从它继承,所以我需要在application_record.rb中放置一个错误处理程序吗?
还是使用某种观察者会更好?
想法?