1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

はじめに

自動デプロイは直前まで問題なく作動していたにも関わらず、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
github
RubyからS3を使ってみる

上記のようなgemでした。

検証計画

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

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

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

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

$ sudo vim /etc/nginx/conf.d/rails.conf
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

# 〜後略〜
Capfile.
# 中身をコメントアウト。全部で問題ない。

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

解決

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?