はじめに
環境
- Rails 5.2.1
- ruby 2.5.1
- capistrano 3.11.1
- AWS(EC2)
- Web Server Nginx
- Application Server Unicorn
前提
EC2インスタンスの生成、sshキーとGitの接続などデプロイ完了後、
自動デプロイに必要なCapistranoの設定を終えた段階。
ローカルで【bundle exec cap production deploy】を叩いた際に発生したエラーのメモです。
尚、今回チーム開発中のため、個人では無い現象もあるかもしれません。
初心者向け:エラーログの確認方法
止まった箇所のエラー文でピンと来ない時は詳細を本番環境のlogで確認する必要があります。
確認する際はcapistranoの導入で確認するべきlogのカレントが変わっている場合に要注意。
【例】
本番環境(ssh接続)→cdでapplication-nameへ移動
application-name
∟current
∟log
∟production.log unicorn.stderr.log unicorn.stdout.log
エラー内容
- SSHキー関連
- bundle install で止まる
- asset compile で止まる
- unicorn start で止まる
SSHKeyの認証エラー
SSHKit::Runner::ExecuteError
そもそも自動デプロイが始まらない。
設定したのにssh鍵がない?と思いながらも下記記事参考に再設定。動きました。感謝。
.ssh $ ssh-add ~/.ssh/hoge.pem
#設定できたら下記表示
Identity added: /Users/xxxx/.ssh/hoge.pem (/Users/xxxx/.ssh/hoge.pem)
#再度自動デプロイのコマンド実行
Capistranoで自動デプロイした時に出たSSHKit::Runner::ExecuteError解決法
ただ、使用予定のキーがある場合は、別のエラーが考えられるので、再設定前に確認した方が無難。ファインダーで見る場合は、念の為隠しファイルを表示「command + shift + .」してみるのも◎
#ターミナルで確認
username:~ $ cd ~/.ssh
username:.ssh $ ls
hoge.pem known_hosts
bundle installで止まる!
まずはここを確認
- error文
- Gemfile、Gemfile.lock
- バージョン指定・使用環境の指定など、Gemfileでの記述にミスは無い?
- bundle installはできている?
- bundle updateは?
- インスタンスの再起動は?
例① 使用環境の指定ミス
エラー文
deviseが、developmentのみで使用することになっていた。
解決!
developmentの外に出して解決。
アプリケーションの枠組みを作った段階でのデプロイで、gemを本番環境で使用する前だったため発生。
group :development do
gem 'hoge'
end
gem 'devise'
例② よく分からんアップデート系errorは再起動での回復率お高め〜nokogiri編〜
エラー文
使う予定の無いスクレイピングのgemについてのエラーで困惑。
gemfileにもgemfile.lockにも記述なし。
長々と重要なお知らせを含むエラー文が出ている。
解決?
こちらに関しては、色々調べた結果どれも当てはまらず
ローカル・本番環境それぞれでbundle installのし直しとインスタンス再起動で解消。
asset compileで止まる!
まずはここを確認
# 本番環境でlog表示(less or cat)
$ less log/production.log
例① template error
# エラー抜粋
ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.):
logから原因となるファイルを確認。
SCSSに変更してview作成を進めていたが、拡張子がCSSのままのapplication.cssがあったため発生。
解決
application.scssに変更する。
例② syntax errorでコンパイルに失敗
scssの記述で不備。
「とりあえず表示させるページを作る」となったが、
初めてのチーム開発でコードレビューの精度の低さ・環境構築とでき上がったページのmergeが同時並行だったことに起因した。
解決
不備のあったファイルの修正とmerge。
自動デプロイをかける前に、ローカルで全変更ページの確認すること。
unicorn startで止まる!
まずはここを確認
# 本番環境でlog表示(less or cat)
$ less log/unicorn.stderr.log
例① deviseでNameError
# エラー抜粋
devise.rb:3: uninitialized constant Devise (NameError)
解決
application.rbへの追記を試したところ、解決。
require 'devise'
例② SyntaxErrorで起動できなかった
# エラー抜粋
SyntaxError: /var/www/freemarket_sample_58d/releases/20190925060438/app/controllers/card_controller.rb:157: syntax error, unexpected end-of-input, expecting keyword_end
end
^
/var/www....
解決
明記してある通り、endの数を正しく修正。
実装中でTODOにしている箇所で、コメントアウトしたコードと合わずに発生。
例③ mysql.sock' (2)
# エラー抜粋
ERROR -- : Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) (Mysql2::Error::ConnectionError)
ソケットの場所が異なるもしくは無い場合など。
解決
再起動すれば生成されるので、一度試す。(起動自体できるかどうか)
直らない場合は、パスで記載されている場所をmy.conf
・database.yml
で確認しmysql.sock
を作成したり、パスの記述を修正する。
② mysql.sock' (38)
coming soon...
③ mysql.sock' (111)
coming soon...
最後に
学習を始めて2ヶ月目。まだまだ何も分からない状態のため、備忘録として更新していきます。
誤った記述があればご指摘ください^^
原因の説明など不足している部分は多々あると思いますが、役に立つことがあれば幸いです。