前提
Ruby on RailsでWebアプリケーションを作っています。
DBをRDS for Mysql(リードレプリカ無し)からRDS Aurora Mysql(Auroraレプリカ有り)へ変更した際、問題が発生しました。
アプリケーションをAuroraレプリカに対応させるため、
Railsガイド v6.0 Active Record で複数のデータベース利用
https://railsguides.jp/active_record_multiple_databases.html
を参考に実施しました。
発生している問題
これまで正常に動作していた下記の処理がエラーを起こすようになりました(トークンを使用する処理を行うとpublic/500.htmlが表示される)。 ・アカウント有効化処理(Ruby on Rails Turorialとほぼ同様) ※ユーザーデータをDBに保存することはできる ・パスワードリセット処理(Ruby on Rails Turorialとほぼ同様) ・omniauth-twitterによるtwitter認証処理
実現したいこと
上記「発生している問題」を解消する。
該当のソースコード
# database.yml(一部抜粋) production: primary: adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch('RAILS_MAX_THREADS') { 5 } %> timeout: 5000 database: <%= ENV['DB_NAME'] %> username: <%= ENV['DB_USERNAME'] %> password: <%= ENV['DB_PASSWORD'] %> host: <%= ENV['DB_HOSTNAME'] %> port: <%= ENV['DB_PORT'] %> primary_replica: adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch('RAILS_MAX_THREADS') { 5 } %> timeout: 5000 database: <%= ENV['DB_NAME'] %> # primaryとは別のusername username: <%= ENV['DB_READ_USERNAME'] %> password: <%= ENV['DB_PASSWORD'] %> host: <%= ENV['DB_REPLICA_HOSTNAME'] %> port: <%= ENV['DB_PORT'] %> # レプリカ明示 replica: true
# application_record.rb(全て) class ApplicationRecord < ActiveRecord::Base self.abstract_class = true if Rails.env.production? connects_to database: { writing: :primary, reading: :primary_replica } end end
# production.rb (一部抜粋) config.active_record.database_selector = { delay: 2.seconds } config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
試したこと
・production.rbの上記3行を削除
→問題なく動作する。
→「コネクションの自動切り替え」が正常に動作できていない?
・DB再作成
→変化無し
最後に
できれば、switch_point等のgemは使用せずに解決したいと思っています。
解決の糸口となるアドバイスを頂けたらと思います。
どうぞよろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
Ruby on Rail:6.0.1
ruby:2.5.1
Mysql:5.7.28
Aurora Mysql:5.7.mysql_aurora.2.07.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。