EC2でインスタンスを立てて、Capistrano3系を用いてデプロイの設定をした際に詰まった点とその対応策を書き記す。
そもそもCapistranoとは
Rubyで作られた自動デプロイツール。特定のファイルに設定を書き記したのち、コマンドを数行打つだけで、アプリケーションをデプロイしてくれる便利ツール。
諸々の設定が終わったらローカル環境から以下のコマンドを打つことによってデプロイが完了する。
bundle exec cap production deploy:check
bundle exec cap production deploy
Capistranoそれ自体や、設定の仕方については以下の記事を参照すると良い。
https://qiita.com/naoki_mochizuki/items/657aca7531b8948d267b
https://qiita.com/Salinger/items/4ee4f3c5ebd5227196c0
https://labs.gree.jp/blog/2013/12/10084/
詰まった点
bundle exec cap production deployを実行した時にたくさんのエラーが出て詰まった。
エラー1: rbenvないよエラー
エラー詳細
rbenv:validate
WARN rbenv: 2.6.0 is not installed or not found in /root/.rbenv/versions/2.6.0 on your_domain
解決策
deploy/production.rb内のuserを確認すること、以下のuserの部分と同じuser権限でrbenvの設定を行うこと。自分の場合、EC2インスタンス内でrootでrbenvの諸々の設定を行なっていたため上記エラーがで続けた。
server 'your_domain', user: 'ec2-user', roles: %w{app}
エラー2: github権限エラー
エラー詳細
githubにアクセスするとpermission deniedになるおなじみのやつ。
解決策
公開鍵と秘密鍵を発行してgithubアカウントに登録すると解消。
https://qiita.com/shizuma/items/2b2f873a0034839e47ce
エラー3: mkdir権限ないよエラー
エラー詳細
mkdirを実行する権限がなく、permission deniedになる。
解決策
権限変更すると解消。
参照: https://qiita.com/itoufo/items/dbd1ef1081fa70f4d24f
エラー4: .envないよエラー
エラー詳細
ERROR linked file /var/www/your_app/shared/.env does not exist on...
解決策
該当ディレクトリに.envファイルを作成すると解消
エラー5: rbenvインストールされてないよエラー
エラー詳細
bundle stdout: rbenv: version `2.6.0' is not installed (set by RBENV_VERSION environment variable)
解決策
config/deploy.rbに書かれている以下のコードのpathを絶対パスに変更すると解消
set :rbenv_path, '/home/ec2-user/.rbenv/'
エラー6: unicornコマンドないよエラー
エラー詳細
bundler: failed to load command: unicorn (/var/www/your_app/shared/bundle/ruby/2.6.0/bin/unicorn) ArgumentError: directory for stderr_path=/var/www/your_app/log/unicorn.stderr.log not writable
解決策
your_appディレクトリ下にlogディレクトリがなかったので作成、中にlogファイルを作成してchmod 555を実行すると通過
参考記事
https://qiita.com/naoki_mochizuki/items/657aca7531b8948d267b
https://qiita.com/aplifyjp/items/5d24394dbd03712a2f1f
デプロイできた
わけわからんくらいエラーが出たがなんとかデプロイできた。インフラ系は何回も構築繰り返すことで知識つくと思うので頑張りたい。