Edited at

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



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

秘密鍵の設定はきちんとやったはずなのに、上手く権限の設定ができていなかったようで。

たまにあることで、その場合このようにすれば良いと教えてもらいました。

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