はじめに
AWSのEC2で本番環境を構築するエラーとの日々を備忘録として、ここに残したいと思います。
環境
ruby 3.0.2
rails 6.1.4
Nginx 12.0.0
puma 5.0
参考URL
https://zenn.dev/naoki_mochizuki/books/1471ce20222227
EC2で本番環境を構築する手順はこちらの記事を参考にさせてもらったので省略させていただきます。
こちらを最後までやり切った後のエラーについて書かせて頂きます。
本番環境へアクセス・・・
参考記事通りに進めていき、SSHでAWS上にログインした状態でこちらのコマンドを実行しwebにアクセスします。
sudo nginx -s reload
bundle exec pumactl start
これでやっと本番環境に構築できたと思ったら、
お約束の通りエラーさんが出てきました。
原因
皆さん色々なアプリを作成されており、そのアプリによって原因は違いますが私の場合は、database.ymlが原因でした。
config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: ユーザー名
password: パスワード
host: ホスト名
production:
<<: *default
database: データベース名
adapter: mysql2
encoding: utf8mb4
charset: utf8mb4
collation: utf8mb4_general_ci
username: <%= Rails.application.credentials.db[:user_name] %>
password: <%= Rails.application.credentials.db[:password] %>
host: <%= Rails.application.credentials.db[:endpoint] %>
pool: 20
timeout: 1000
対策
こちらファイルと.envという環境変数のファイルを変更していきます。
.env
RAILS_MAX_THREADS=5
DATABASE_HOST=RDSのエンドポイント
DATABASE_USER=マスターユーザー名
DATABASE_PASSWORD=マスターユーザーのパスワード
DATABASE_NAME=データベース名
RAILS_ENV=production
config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS", "5" ) %>
host: <%= ENV.fetch("DATABASE_HOST", "localhost" ) %>
username: <%= ENV.fetch("DATABASE_USER") %>
password: <%= ENV.fetch("DATABASE_PASSWORD") %>
database: <%= ENV.fetch("DATABASE_NAME", "my_project") %>
production:
<<: *default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS", "5" ) %>
host: <%= ENV.fetch("DATABASE_HOST", "localhost" ) %>
username: <%= ENV.fetch("DATABASE_USER") %>
password: <%= ENV.fetch("DATABASE_PASSWORD") %>
database: <%= ENV.fetch("DATABASE_NAME", "my_project") %>
pool: 20
timeout: 1000
こちらに変更したファイルになります。
こちらを変更したことにより本番環境にアクセスできるようになりました。
まとめ
本番環境で出るエラーはログがないため、苦労しました。