bundle exec cap production deployで起きるあるあるエラー

自分がよくデプロイする時に起きるエラーをまとめます。

またそのエラーの解決方法も紹介してきます。

##動作環境

 - OS:Mac
 - エディタ：VScode
 - Ruby2.5.1
 - Ruby on Rail:5.2.1
 - Git:2.21

##まず最初にやっておくこと

```bash:ターミナル
$bundle install
```
これをやらないと、[あるあるデプロイエラー④](#あるあるデプロイエラー④)のエラーが出ることがあるので最初にやっておきましょう。




##あるあるデプロイエラー①


```bash:ターミナル
$ bundle exec cap production deploy
##エラー文
upported if ED25519 is available (NotImplementedError)
net-ssh requires the following gems for ed25519 support:
 * ed25519 (>= 1.2, < 2.0)
 * bcrypt_pbkdf (>= 1.0, < 2.0)
See https://github.com/net-ssh/net-ssh/issues/565 for more information
Gem::LoadError : "ed25519 is not part of the bundle. Add it to your Gemfile."
(Backtrace restricted to imported tasks)
cap aborted!
NotImplementedError: OpenSSH keys only supported if ED25519 is available
net-ssh requires the following gems for ed25519 support:
 * ed25519 (>= 1.2, < 2.0)
 * bcrypt_pbkdf (>= 1.0, < 2.0)
See https://github.com/net-ssh/net-ssh/issues/565 for more information
Gem::LoadError : "ed25519 is not part of the bundle. Add it to your Gemfile."

Tasks: TOP => rbenv:validate
(See full trace by running task with --trace)

```
###解決方法
gemfileに"ed25519","bcrypt_pbkdf"に追加する。

```ruby:gemfile

# Deployment
group :deployment do
  #他のgem
  gem 'unicorn'
  gem 'ed25519' #追加
  gem 'bcrypt_pbkdf' #追加
end
```

##あるあるデプロイエラー②

```ruby
$ bundle exec cap production deploy

#エラー文
: Exception while executing on host refoma-web07: git exit status: 128 (SSHKit::Runner::ExecuteError)
git stdout: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
git stderr: Nothing written
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host refoma-web07: git exit status: 128
git stdout: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
git stderr: Nothing written


Caused by:
SSHKit::Command::Failed: git exit status: 128
git stdout: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
git stderr: Nothing written

Tasks: TOP => git:check
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing on host refoma-web07: git exit status: 128
git stdout: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
git stderr: Nothing written
  INFO Notifying Slack of deploy failed
```

###解決策

localの自分のアプリのディレクトリで以下のコマンドを実行する

```bash:ターミナル
ssh-add ~/.ssh/id_rsa   <ーこの鍵はGithubのssh接続で使ってるやつ
```

最初からつながってない方はconfig/deploy.rbの設定を見てください。

##あるあるデプロイエラー③

```bash:ターミナル
$ bundle install
##エラー文
Could not find fog-vsphere-3.2.3 in any of the sources
```
そもそも`bundle install`できない。



###解決策
Gemfile.lock で指定されているgemのバージョンがyank（削除）されてしまっているため。

対象のgemをupdateする。

```bash:ターミナル
$ bundle update fog-vsphere
```

##[あるあるデプロイエラー④](#あるあるデプロイエラー④)

```bash:ターミナル
$ bundle exec cap production deploy
##エラー文
bundler: failed to load command: cap(/Users/tanaka/Desktop/GitHub/web-app/vendor/bundle/ruby/2.5.0/bin/cap)）
```

うまくいったと思ったらエラー。
非常に不愉快。

###解決方法
```
$ bundle install
```
 `bundle exec cap production deploy`をする前に、`bundle install`をしないとおこるので、事前に`bundle install`をしておきましょう。

##あるあるデプロイエラー⑤

```bash

エラーがでないで途中で止まる ##目安：10分以上
```

サーバーとやりとり中に通信が遮断されると起きる

###解決策
```bash

Control + c ##強制終了
```

待つのが面倒く際ので、実行を終了させてもう一度デプロイしましょう。


##参考文献

- [bundle install すると Could not find xxx in any of the sources と怒られる場合の対処法](https://qiita.com/jnchito/items/44ab1df134369ed76911)
- [capistranoでいきなりgithubに繋がらなくなった時の話](https://qiita.com/ryic/items/24b3abc36f5697c945b2)