Help us understand the problem. What is going on with this article?

【Rails】Capistranoを使用した自動デプロイが途中で止まる!エラー解決まとめ【随時更新】

はじめに

環境

  • 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鍵がない?と思いながらも下記記事参考に再設定。動きました。感謝。

local.
.ssh $ ssh-add ~/.ssh/hoge.pem
#設定できたら下記表示
Identity added: /Users/xxxx/.ssh/hoge.pem (/Users/xxxx/.ssh/hoge.pem)
#再度自動デプロイのコマンド実行

Capistranoで自動デプロイした時に出たSSHKit::Runner::ExecuteError解決法

ただ、使用予定のキーがある場合は、別のエラーが考えられるので、再設定前に確認した方が無難。ファインダーで見る場合は、念の為隠しファイルを表示「command + shift + .」してみるのも◎

local.
#ターミナルで確認
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を本番環境で使用する前だったため発生。

Gemfile.
group :development do
gem 'hoge'
end
gem 'devise'

例② よく分からんアップデート系errorは再起動での回復率お高め〜nokogiri編〜

エラー文

使う予定の無いスクレイピングのgemについてのエラーで困惑。
gemfileにもgemfile.lockにも記述なし。
長々と重要なお知らせを含むエラー文が出ている。

解決?

こちらに関しては、色々調べた結果どれも当てはまらず
ローカル・本番環境それぞれでbundle installのし直しとインスタンス再起動で解消。

asset compileで止まる!

まずはここを確認

production.log
# 本番環境でlog表示(less or cat)
$ less log/production.log

例① template error

production.log
# エラー抜粋
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で止まる!

まずはここを確認

unicorn.stderr.log
# 本番環境でlog表示(less or cat)
$ less log/unicorn.stderr.log

例① deviseでNameError

unicorn.stderr.log
# エラー抜粋
devise.rb:3: uninitialized constant Devise (NameError)

解決

application.rbへの追記を試したところ、解決。

config/application.rb
require 'devise'

参考ページ(GitHub)

例② 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)

unicorn.stderr.log
# エラー抜粋
ERROR -- : Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) (Mysql2::Error::ConnectionError)

ソケットの場所が異なるもしくは無い場合など。

解決

再起動すれば生成されるので、一度試す。(起動自体できるかどうか)
直らない場合は、パスで記載されている場所をmy.confdatabase.ymlで確認しmysql.sockを作成したり、パスの記述を修正する。

本番環境/etc/my.cnf
database.yml

② mysql.sock' (38)

coming soon...

③ mysql.sock' (111)

coming soon...

最後に

学習を始めて2ヶ月目。まだまだ何も分からない状態のため、備忘録として更新していきます。
誤った記述があればご指摘ください^^
原因の説明など不足している部分は多々あると思いますが、役に立つことがあれば幸いです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away