2つのRailsアプリケーション間でセッションを共有したい
この投稿は下記ページの転載です。
https://teratail.com/questions/61778
Rails3で稼働しているアプリケーションをRails5にアップデートしようと思っています。
Rails5のプロジェクトを新規作成し、現状のアプリケーションと同じサーバー内で2つを並行稼動させ、Nginx側でURLによるルーティングをすることで徐々に5へ移行していくような計画をたてています。
静的なページはこれでうまく動いているのですが、ログインが必要なページでセッションが共有されず困っています。
Rails3とRails4以降ではセッション暗号化の仕組みが変わっているようなので、下記の記事を参考に設定を行いました。
- 新旧Railsでセッションストアの設定を統一
# config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, key: 'example.net_session'
- Rails5のcookie形式をjsonからmarshalに変更
Rails.application.config.action_dispatch.cookies_serializer = :marshal # default: :json
- Rails5のsecret_key_baseの設定を消し、代わりにsecret_tokenを設定
secret_tokenはRails3のconfig.secret_token と同じ値です
development:
# secret_key_base: abc123...
secret_token: 123abc...
- Deviseのsecret_keyを設定
これも新旧Railsで共通の値を入れています
Devise.setup do |config|
config.secret_key = "xyz123"
~~~
end
設定は以上です。
ローカルで2つのRails(WEBrickとPuma)をdocker内で立ち上げ、本番と同じようにNginxでURLによってproxy_passを振り分けるという方法でテストしています。
Rails3側でログインし、次にRails5側で実装済みのページに移動するとcookieが書き換えられてしまい、非ログイン状態に戻ってしまいます。
他に試すべきこと、確認事項などあれば些細な事でも結構ですので、助言を頂けると幸いです。よろしくお願いします。