質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

1回答

1239閲覧

[AWS]Capistrano設定 エラー

退会済みユーザー

退会済みユーザー

総合スコア0

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

0クリップ

投稿2020/08/23 02:28

編集2020/08/23 10:53

AWSでCapistranoを利用した自動デプロイ設定をしています。

流れとしてEC2でインスタンスを作成→Rubyをインストール→Railsとデータベースの設定(Mysql)→GitHubにSSH鍵を登録→GiyHubからコードをクローン→本番環境の設定(Swap(スワップ)領域設定、本番環境でbundlerをインストール、railsの起動の設定、Nginxの設定まで完了させました。
その後、Capistanoを使用できるように設定をしているのですが、以下のようなエラーが出ている状態です。
本番環境のアドレスにアクセスすると以下のエラーが発生。

502 Bad Gateway

Unicornが起動していない、ec2を再起動など原因があると思い、調べてみたところ、Unicornの起動に失敗していることが分かりました。

以下のコマンドを実行すると以下のようなエラーが出る状態です。

EC2サーバー側のエラー

1bundler: failed to load command: unicorn_rails (/home/ec2-user/.rbenv/versions/2.5.8/bin/unicorn_rails) 2ArgumentError: config_file=config/unicorn.rb would not be accessible in working_directory=/var/www/current 3 /home/ec2-user/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/lib/unicorn/configurator.rb:592:in `working_directory' 4 config/unicorn.rb:5:in `reload' 5 /home/ec2-user/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/lib/unicorn/configurator.rb:84:in `instance_eval' 6 /home/ec2-user/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/lib/unicorn/configurator.rb:84:in `reload' 7 /home/ec2-user/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/lib/unicorn/configurator.rb:77:in `initialize' 8 /home/ec2-user/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:77:in `new' 9 /home/ec2-user/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:77:in `initialize' 10 /home/ec2-user/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/bin/unicorn_rails:209:in `new' 11 /home/ec2-user/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/bin/unicorn_rails:209:in `<top (required)>' 12 /home/ec2-user/.rbenv/versions/2.5.8/bin/unicorn_rails:23:in `load' 13 /home/ec2-user/.rbenv/versions/2.5.8/bin/unicorn_rails:23:in `<top (required)>' 14master failed to start, check stderr log for details

config/unicorn.rb

1app_path = File.expand_path('../../../', __FILE__) 2 3 4worker_processes 1 5# currentを指定 6working_directory "#{app_path}/current" 7 8# それぞれ、sharedの中を参照するよう変更 9 10pid "#{app_path}/shared/tmp/pids/unicorn.pid" 11 12listen "#{app_path}/shared/tmp/sockets/unicorn.sock" 13 14stderr_path "#{app_path}/shared/log/unicorn.stderr.log" 15 16stdout_path "#{app_path}/shared/log/unicorn.stdout.log" 17#Railsアプリケーションの応答を待つ上限時間を設定 18timeout 60 19 20#以下は応用的な設定なので説明は割愛 21 22preload_app true 23GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true 24 25check_client_connection false 26 27run_once = true 28 29before_fork do |server, worker| 30 defined?(ActiveRecord::Base) && 31 ActiveRecord::Base.connection.disconnect! 32 33 if run_once 34 run_once = false # prevent from firing again 35 end 36 37 old_pid = "#{server.config[:pid]}.oldbin" 38 if File.exist?(old_pid) && server.pid != old_pid 39 begin 40 sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU 41 Process.kill(sig, File.read(old_pid).to_i) 42 rescue Errno::ENOENT, Errno::ESRCH => e 43 logger.error e 44 end 45 end 46end 47 48after_fork do |_server, _worker| 49 defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection 50end

rails.conf

1upstream app_server { 2 # sharedの中を参照するよう変更 3 server unix:/var/www/<アプリケーション名>/shared/tmp/sockets/unicorn.sock; 4} 5 6server { 7 listen 80; 8 server_name <Elastic IPを記入>; 9 10# クライアントからアップロードされてくるファイルの容量の上限を2ギガに設定。デフォルトは1メガなので大きめにしておく 11 client_max_body_size 2g; 12 13 # currentの中を参照するよう変更 14 root /var/www/<アプリケーション名>/current/public; 15 16 location ^~ /assets/ { 17 gzip_static on; 18 expires max; 19 add_header Cache-Control public; 20 # currentの中を参照するよう変更 21 root /var/www/<アプリケーション名>/current/public; 22 } 23 24 try_files $uri/index.html $uri @unicorn; 25 26 location @unicorn { 27 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 28 proxy_set_header Host $http_host; 29 proxy_redirect off; 30 proxy_pass http://app_server; 31 } 32 33 error_page 500 502 503 504 /500.html; 34}

こちら原因分かる方いませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ArgumentError: config_file=config/unicorn.rb would not be accessible in working_directory=/var/www/aaaa/current

ということなので、権限周りが気になりますね。
恐らくunicornを起動しているユーザはec2-userですね。
Railsのソースを置いてあるディレクトリから、configディレクトリ、config/unicorn.rbあたりをec2-userが参照する権限があるかを確認してみてください。
具体的にはls -laあたりで確認できます。

投稿2020/08/23 09:35

yu_1985

総合スコア7586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/23 09:38

ls -laを実行してみました。 以下のような設定になっていました。 合計 132 drwxrwxr-x 15 ec2-user ec2-user 4096 8月 21 04:39 . drwxr-xr-x 3 ec2-user root 4096 8月 19 14:33 .. -rw-rw-r-- 1 ec2-user ec2-user 8196 8月 19 14:33 .DS_Store drwxrwxr-x 8 ec2-user ec2-user 4096 8月 21 14:56 .git -rw-rw-r-- 1 ec2-user ec2-user 637 8月 19 14:33 .gitignore -rw-rw-r-- 1 ec2-user ec2-user 22 8月 19 14:33 .rspec -rw-rw-r-- 1 ec2-user ec2-user 6 8月 19 14:33 .ruby-version -rw-rw-r-- 1 ec2-user ec2-user 275 8月 21 04:39 Capfile -rw-rw-r-- 1 ec2-user ec2-user 252 8月 19 14:33 Dockerfile -rw-rw-r-- 1 ec2-user ec2-user 2802 8月 21 04:39 Gemfile -rw-rw-r-- 1 ec2-user ec2-user 9589 8月 21 04:39 Gemfile.lock -rw-rw-r-- 1 ec2-user ec2-user 5553 8月 19 14:33 README.md -rw-rw-r-- 1 ec2-user ec2-user 227 8月 19 14:33 Rakefile drwxrwxr-x 11 ec2-user ec2-user 4096 8月 19 14:33 app drwxrwxr-x 2 ec2-user ec2-user 4096 8月 19 14:33 bin drwxrwxr-x 6 ec2-user ec2-user 4096 8月 21 14:56 config -rw-rw-r-- 1 ec2-user ec2-user 130 8月 19 14:33 config.ru drwxrwxr-x 4 ec2-user ec2-user 4096 8月 19 14:33 db -rw-rw-r-- 1 ec2-user ec2-user 424 8月 19 14:33 docker-compose.yml drwxrwxr-x 4 ec2-user ec2-user 4096 8月 19 14:33 lib drwxrwxr-x 2 ec2-user ec2-user 4096 8月 20 23:53 log -rw-rw-r-- 1 ec2-user ec2-user 67 8月 19 14:33 package.json drwxrwxr-x 4 ec2-user ec2-user 4096 8月 21 00:40 public drwxrwxr-x 4 ec2-user ec2-user 4096 8月 19 14:33 spec drwxrwxr-x 2 ec2-user ec2-user 4096 8月 19 14:33 storage drwxrwxr-x 9 ec2-user ec2-user 4096 8月 19 14:33 test drwxrwxr-x 6 ec2-user ec2-user 4096 8月 20 23:53 tmp drwxrwxr-x 2 ec2-user ec2-user 4096 8月 19 14:33 vendor
yu_1985

2020/08/23 09:42

configディレクトリの中はどうですか? また、念の為ですがどのパスで実行しましたか?
退会済みユーザー

退会済みユーザー

2020/08/23 09:46

ec2-user@ip-番号 aaaa で実行しています。 configは以下です。 drwxrwxr-x 6 ec2-user ec2-user 4096 8月 21 14:56 . drwxrwxr-x 15 ec2-user ec2-user 4096 8月 21 04:39 .. -rw-rw-r-- 1 ec2-user ec2-user 660 8月 19 14:33 application.rb -rw-rw-r-- 1 ec2-user ec2-user 207 8月 19 14:33 boot.rb -rw-rw-r-- 1 ec2-user ec2-user 191 8月 19 14:33 cable.yml -rw-rw-r-- 1 ec2-user ec2-user 464 8月 19 14:33 credentials.yml.enc -rw-rw-r-- 1 ec2-user ec2-user 1925 8月 21 00:03 database.yml drwxrwxr-x 2 ec2-user ec2-user 4096 8月 21 14:40 deploy -rw-rw-r-- 1 ec2-user ec2-user 1308 8月 21 04:39 deploy.rb -rw-rw-r-- 1 ec2-user ec2-user 128 8月 19 14:33 environment.rb drwxrwxr-x 2 ec2-user ec2-user 4096 8月 19 14:33 environments drwxrwxr-x 2 ec2-user ec2-user 4096 8月 20 23:45 initializers drwxrwxr-x 2 ec2-user ec2-user 4096 8月 19 14:33 locales -rw-rw-r-- 1 ec2-user ec2-user 1397 8月 19 14:33 puma.rb -rw-rw-r-- 1 ec2-user ec2-user 849 8月 19 14:33 routes.rb -rw-rw-r-- 1 ec2-user ec2-user 111 8月 19 14:33 spring.rb -rw-rw-r-- 1 ec2-user ec2-user 1093 8月 19 14:33 storage.yml -rw-rw-r-- 1 ec2-user ec2-user 1289 8月 21 14:56 unicorn.rb
yu_1985

2020/08/23 09:54

> ec2-user@ip-番号 aaaa > working_directory=/var/www/aaaa/current とありますが、aaaa配下にcurrentというディレクトリがないように見えます。
退会済みユーザー

退会済みユーザー

2020/08/23 10:33

はい、ないようです。しかし、設定方法はapp_path = File.expand_path('../../', __FILE__)で記載しているように見えます、、
退会済みユーザー

退会済みユーザー

2020/08/23 12:10 編集

app_path = File.expand_path('../../../', __FILE__) 上記に変更し実行してみたところエラー文は以下のように変わりました。 bundler: failed to load command: unicorn_rails (/home/ec2-user/.rbenv/versions/2.5.8/bin/unicorn_rails) 補足として自動デプロイは成功していないため、currentがないと思われます。 ArgumentError: config_file=config/unicorn.rb would not be accessible in working_directory=/var/www/current
yu_1985

2020/08/23 12:51

currentを指定しているのにcurrentディレクトリがないのなら当然エラーになりますよね…。 デプロイに成功していないのなら、デプロイの方のトラブルシュートが必要でしょう。
退会済みユーザー

退会済みユーザー

2020/08/23 14:09 編集

はい、ちなみに自動デプロイを実行してみたところ以下のようなエラーが出てました。 おそらくUnicornの設定がうまく行っていないからだと思われます。 unicorn:start 01 $HOME/.rbenv/bin/rbenv exec bundle exec unicorn -c /var/www/aaaa/current/config/unicorn.rb -E deployment -D 01 master failed to start, check stderr log for details raceback (most recent call last): 1: from /Users/ユーザ/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute' /Users/ユーザ名/.rbenv/versions/2.5.8/lib/ruby/gems/2.5.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as ec2-user@Elasticip番号: bundle exit status: 1 (SSHKit::Runner::ExecuteError) bundle stdout: Nothing written bundle stderr: master failed to start, check stderr log for details (Backtrace restricted to imported tasks) cap aborted! SSHKit::Runner::ExecuteError: Exception while executing as ec2-user@Elasticip番号:: bundle exit status: 1 bundle stdout: Nothing written bundle stderr: master failed to start, check stderr log for details Caused by: SSHKit::Command::Failed: bundle exit status: 1 bundle stdout: Nothing written bundle stderr: master failed to start, check stderr log for details Tasks: TOP => unicorn:start (See full trace by running task with --trace) The deploy has failed with an error: Exception while executing as ec2-user@Elasticip番号:: bundle exit status: 1 bundle stdout: Nothing written bundle stderr: master failed to start, check stderr log for details ** DEPLOY FAILED ** Refer to log/capistrano.log for details. Here are the last 20 lines: DEBUG [29071733] Finished in 0.090 seconds with exit status 0 (successful). INFO [d932a065] Running $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate as ec2-user@Elasticip番号: DEBUG [d932a065] Command: cd /var/www/aaaa/releases/20200823130418 && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.5.8" RAILS_ENV="production" ; $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate ) INFO [d932a065] Finished in 1.997 seconds with exit status 0 (successful). INFO [470b4d91] Running /usr/bin/env ln -s /var/www/aaaa/releases/20200823130418 /var/www/aaaa/releases/current as ec2-user@Elasticip番号: DEBUG [470b4d91] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.5.8" ; /usr/bin/env ln -s /var/www/aaaa/releases/20200823130418 /var/www/aaaa/releases/current ) INFO [470b4d91] Finished in 0.115 seconds with exit status 0 (successful). INFO [b553c215] Running /usr/bin/env mv /var/www/aaaa/releases/current /var/www/aaaa as ec2-user@Elasticip番号: DEBUG [b553c215] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.5.8" ; /usr/bin/env mv /var/www/aaaa/releases/current /var/www/aaaa ) INFO [b553c215] Finished in 0.118 seconds with exit status 0 (successful). DEBUG [4b04f1eb] Running if test ! -d /var/www/aaaa/current; then echo "Directory does not exist '/var/www/aaaa/current'" 1>&2; false; fi as ec2-user@Elasticip番号: DEBUG [4b04f1eb] Command: if test ! -d /var/www/aaaa/current; then echo "Directory does not exist '/var/www/aaaa/current'" 1>&2; false; fi DEBUG [4b04f1eb] Finished in 0.095 seconds with exit status 0 (successful). DEBUG [18f80244] Running [ -e /var/www/aaaa/shared/tmp/pids/unicorn.pid ] && kill -0 `cat /var/www/aaaa/shared/tmp/pids/unicorn.pid` as ec2-user@Elasticip番号: DEBUG [18f80244] Command: [ -e /var/www/aaaa/shared/tmp/pids/unicorn.pid ] && kill -0 `cat /var/www/aaaa/shared/tmp/pids/unicorn.pid` DEBUG [18f80244] bash: 0 行: kill: (18514) - そのようなプロセスはありません DEBUG [18f80244] Finished in 0.100 seconds with exit status 1 (failed). INFO [c49dc855] Running $HOME/.rbenv/bin/rbenv exec bundle exec unicorn -c /var/www/aaaa/current/config/unicorn.rb -E deployment -D as ec2-user@Elasticip番号: DEBUG [c49dc855] Command: cd /var/www/aaaa/current && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.5.8" RAILS_ENV="production" ; $HOME/.rbenv/bin/rbenv exec bundle exec unicorn -c /var/www/aaaa/current/config/unicorn.rb -E deployment -D ) DEBUG [c49dc855] master failed to start, check stderr log for details
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問