はじめに
ポートフォリオ作成のために、Railsで作成したアプリケーションをAWS上にデプロイしました。デプロイには、nginx、AWS、Pumaを使用しました。
しかし、nginxやPumaは正常に動作しているようなのに、独自ドメインでページにアクセスすると画面が表示されないというエラーが発生しました。
環境
- Rails 7.1.4
- Ruby 3.2.3
解決法
エラーの原因は、Railsのデフォルト設定であるconfig.force_ssl = true
にありました。これにより全てのアクセスがHTTPSにリダイレクトされるため、HTTPでの接続ができなくなっていました。
以下の手順で解決しました:
-
config/environments/production.rb
ファイルを開き、config.force_ssl
の値を変更します。config/environments/production.rb# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. config.force_ssl = false
-
ファイルを保存後、Pumaを再起動します。私はsystemdで管理しているため、以下のコマンドを使用しました。
sudo systemctl restart puma
-
設定を反映させた後、ブラウザでページを開くと正常に表示されるようになりました。
補足
元々設定されていたconfig.force_ssl = true
は、アプリケーションへの全てのアクセスをSSL経由にする設定です。私の場合、AWS上でHTTPのみの設定をしていたため、画面が表示されないエラーが発生しました。
config.force_ssl = true
の記述はRails 7.1以降にデフォルトの記述として設定されました。
参考ページ:
おわりに
今回のエラーは、Rails 7.1以降にデフォルトで有効になった設定が原因で発生しました。ネットで調べても情報が少なかったため、ChatGPTを活用して原因を特定することができました。
デフォルトでSSLが有効になっているので、今後はデプロイ時に最初からSSL化を行うことが重要そうです。
ちなみに、私がRailsアプリをAWSでデプロイする際に参考にしたサイトは以下です。
Railsのデプロイに関して
AWSに関して