#はじめに
初心者がRailsチュートリアルのやり方を無視アレンジして無謀にもAWSでデプロイしたためにエラー地獄にハマった軌跡をメモとして残しました。
(ミドルウェアもチュートリアルと変えてます。WEBサーバー:nginx + unicorn、DB:mysql(RDS))
#参考記事
「rails aws」で検索して上位に出てきた こちらの記事を参考(めちゃくちゃ助かりました。)
#環境
Rails 6.0.3
ruby 3.0.2
unicorn v6.0.0
nginx/1.20.1
mysql 8.0.2
#unicorn.rb
listen
のパスを{app_name}/tmp/unicorn.sock
に変更する(pidも同様)。こちらにある通り、参考記事は古い記述になってるので上記の通り変更することでNginxとの接続が可能になるらしい。
#credentials.yml.enc
さらにRails5.2以降はsecret.ymlがcredentials.yml.encになったらしい。{app_name}/
で以下を実行で編集&master.key作成
(master.keyは.gitignore
に入るのでproduction環境は手動で作成する必要があるらしい。unicorn起動時に意味のわからないエラーの原因の1つはこれでした。このあたりで結構ハマった...)
$ EDITOR="vi" bin/rails credentials:edit
ちなみにcredentials.yml.encは普通にvimで直接編集できないのでこの方法でやる必要があるらしいです。
#nginxの設定ファイル
デフォルトは/etc/nginx/conf.d/default.conf
に作られるので{app_name}.conf
に変更した後に以下の部分を変更。
upstream unicorn {
server unix:{app_name}/tmp/unicorn.sock;
}
#おわりに
これらの設定を見直した状態でunicorn、nginxなど再起動で無事サーバーが正常起動しました。終わってみれば、参考記事と現行バージョンの差異による設定ファイルの場所や書き方などの変更作業がエラー対処の大半の時間を費やしていた気がします。
#aws要素は?
aws特に関係ない話になってしまいましたが、DBをチュートリアルのpostgresからmysql(RDS)に変えた部分は大して影響ありませんでした(今のところ)。DB接続周りはdatabase.yml
でhostをRDSのエンドポイントにして、usernameとpassword変えたくらいで問題なかったはずです。VPCのセキュリティグループでRDSとEC2間のポートなどが適切に設定してあればこれくらいの変更でいけると思います。
#約15時間にわたる死闘の末
唐突に画面に映ったhello, world!
の文字列。ああ、そういえばRailsチュートリアル進めてたんだった…ここまで感動したhello, world!
は初めてだよ。もう、ゴールしていいよね…?
#参考記事
【Ruby on Rails】unicornをNginx環境下で動かす時の設定方法
【CentOS 7】Nginx + Unicorn で Rails アプリケーションを本番環境で立ち上げる方法
ActiveRecord::NoDatabaseErrorが出た時の対処法 | Rails Ambassador ~Railsの伝道師~
Nginxで「could not build server_names_hash...」エラーが出た時の対処方法 - Qiita
"The name org.freedesktop.PolicyKit1 was not provided by any .service files"が表示されたら... - Qiita
Rails5.2から追加された credentials.yml.enc のキホン - Qiita
MySQLのバージョンを5.1から5.7にしてRubyからMySQLに接続する際にlibmysqlclient_ | tackeyy.com
【Rails】Webサーバー「Unicorn」の基本情報と実装方法 - AUTOVICE
【YAML】Railsのdatabase.ymlについてなんとなく分かった気になっていた記法・意味まとめ - Qiita