Rails
capistrano
AWS

Capistranoを利用した自動デプロイでハマったエラー

つまずいたところ

Capistranoを導入し、ローカルディレクトリでbundle exec cap production deployしてもデプロイされておらず、
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as 〜省略
Caused by:
Net::SSH::AuthenticationFailed: Authentication failed for user 〜省略
となり、起動しなかった。

 対策①

調べてみたら、デプロイ前にunicornのkillが必要とのことだったので、
kill -QUIT cat tmp/pids/unicorn.pid してみたら
「そのようなファイルやディレクトリはありません」
と怒られる。。

さらに調べると、Capistarnoを導入すると、unicorn.pidの所属するディレクトリが別の場所に移ってしまうため、 tmp/pids/unicorn.pid のようにパスを指定しても、Unicornのプロセスをkillできなくなるとのこと!!

そんな時は、
$ ps aux | grep unicorn

でunicorn masterと表示されているプロセスがkillすべきものとのこと。
そしてその番号を
kill -9 xxxx

killする!!!
とのことだったが、そもそもunicorn master の表記がなく、killしても「そのようなプロセスはありません」
と怒られる。。。。

そもそもkillすべきものはないようです。次の対策へ。。。

対策②

エラー文を振り返る。
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as 〜省略
Caused by:
Net::SSH::AuthenticationFailed: Authentication failed for user 〜省略

理由のところに注目。
Authentication とは認証なので、user~の認証がSSHでできていないですよ〜みたいな感じでしょうか。

おそらく認証が上手くいってない模様だったので、

awsからログアウトして、.sshフォルダに移動してから

$ ssh-add ~/.ssh/xxxx.pem

することで解決しました!!

秘密鍵の設定はきちんとやったはずなのに、上手く権限の設定ができていなかったようで。
たまにあることで、その場合このようにすれば良いと教えてもらいました。

まだまだわからないことだらけで呆然とすることが多いですが、滅多にやる作業で備忘録として。