自動デプロイのコマンド打ったら【LoadError: No such file to load -- aws-sdk-s3.rb】がでた


# はじめに
自動デプロイは直前まで問題なく作動していたにも関わらず、view周りのファイル修正後、発生しました。
そのため、特定まで少々時間を要したので、エラー解決まで辿ったデバッグの履歴と共に備忘録として記載します。

### 開発環境
- Rails 5.2.3
- ruby 2.5.1
- capistrano 3.11.1
- AWS(EC2)
- Web Server Nginx
- Application Server Unicorn

### 先に結論
根本原因は不明なものの、`aws-sdk`というgemを追加することで解決。

# エラー文（ファイルのLoadError）

```unicorn.stderr.log
# 本番環境でlog表示（less or cat）
＄ less log/unicorn.stderr.log
# エラー抜粋
I, [2019-09-20T08:48:07.350883 #12335]  INFO -- : Refreshing Gem list
bundler: failed to load command: unicorn (/var/www/freemarket_sample_58d/shared/bundle/ruby/2.5.0/bin/unicorn)
LoadError: No such file to load -- aws-sdk-s3.rb
```

今回導入予定の無い`aws-sdk`というパッケージに関連するエラーに遭遇。
確認したところ、

[Amazon](https://aws.amazon.com/jp/s3/?nc1=h_ls)
[github](https://github.com/aws/aws-sdk-ruby/tree/master/gems/aws-sdk-s3)
[RubyからS3を使ってみる](https://qiita.com/katsuyoshi/items/d693e57eadc40465e7e6)


上記のようなgemでした。

## 検証計画
- 本番・ローカルでgemfile、gemfile lockの確認→記述なし
- 再起動・bundleinstallのし直し→変化なし
- S3導入時に変更した設定関連のファイルを確認→問題無さそう
（`database.yml`/`deploy.rb`/`image_uploder`/`unicorn.rb`/`carrierwave.rb`/`enviroment.rb`/`capfile`など）
- コミットを辿り自動デプロイできていたところまで遡る→できていたはずの段階でも同じエラー
- ★一度、 aws-sdk-s3を導入してみる
- git cloneをやり直し、環境構築
- EC２インスタンスの作成のし直し

## 一度手動でも同じエラーが出るか確認する

純粋に導入時に変更したファイルを修正するだけですが、備忘録として。
変更を加えるファイルは数少ないので３ステップで簡単に検証できます。

①まずは`rails.conf`の参照するディレクトリのパスを変更した部分を戻す。
**本番環境vimで開くnginxの設定ファイル。変更後、読み込みコマンド忘れずに**

```
$ sudo vim /etc/nginx/conf.d/rails.conf
```
```irb:rails.conf
#---Unicornと連携させる設定---
upstream app_server {
  server unix:/var/www/appname/tmp/sockets/unicorn.sock;

# 導入後は下記の通りsharedで参照するようにしていた
# server unix:/var/www/appname/shared/tmp/sockets/unicorn.sock;
}

# 接続を受け付けるポート番号・接続を受け付けるリクエストURLなどサーバの設定
server {
  listen 80;
  server_name ※Elastic IP※;

#---接続が来た際のrootディレクトリ---
  root /var/www/appname/public;

# 導入後は下記の通りcurrentで参照するようにしていた
# root /var/www/appname/current/public;

#---assetsファイルのアクセスに適用される設定---
  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;

# 導入後は下記を追加していたので削除かコメントアウト
# root /var/www/appname/current/public;
  }

  try_files $uri/index.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }

  error_page 500 502 503 504 /500.html;
}
```

②次に`unicorn.rb`の参照するディレクトリのパスを変更した部分を戻す。

```unicorn.rb
#---app_pathの定義---
app_path = File.expand_path('../../', __FILE__)
# app_path = File.expand_path('../../../', __FILE__)

#---アプリケーションサーバの性能を決定---
worker_processes 1
working_directory app_path
# working_directory "#{app_path}/current"

#---導入後はsharedの中を参照するようにしていた---
listen "#{app_path}/tmp/sockets/unicorn.sock"
pid "#{app_path}/tmp/pids/unicorn.pid"
stderr_path "#{app_path}/log/unicorn.stderr.log"
stdout_path "#{app_path}/log/unicorn.stdout.log"
# listen "#{app_path}/shared/tmp/sockets/unicorn.sock"
# pid "#{app_path}/shared/tmp/pids/unicorn.pid"
# stderr_path "#{app_path}/shared/log/unicorn.stderr.log"
# stdout_path "#{app_path}/shared/log/unicorn.stdout.log"

#---Railsアプリケーションの応答を待つ上限時間の設定---
timeout 60

# 〜後略〜
```

```irb:Capfile.
# 中身をコメントアウト。全部で問題ない。
```

今回の場合、自動・手動に関わらず同じエラーでページが表示されませんでした。

## 解決
結局、導入することで解決。
Gemfileに`aws-sdk`を追加、bundleinstall、merge、自動デプロイで本番環境にページ表示されるように。