前提・実現したいこと
Railsのアプリ開発においてAWSでデプロイを行っており、Capistiranoでの自動デプロイまで完了しています。
しかし、このままだとURLがIPアドレスのため、「https://...」となるように、
HTTP通信とSSL認証まで行いたいと考えています。
現在の状況として、ドメインを取得し、Nginxの設定変更(server nameをIPアドレス→ドメイン名)、
unicornの停止確認まで問題なく進んでいます。
発生している問題・エラーメッセージ
「unicorn rails」コマンドを実行した時に、以下のエラーが表示されました。 ※アプリ名「match-you」
[ec2-user@ip-172-31-38-172 match-you]$ bundle exec unicorn_rails -c /var/www/rails/match-you/config/unicorn.conf.rb -D -E production bundler: failed to load command: unicorn_rails (/home/ec2-user/.rbenv/versions/2.6.5/bin/unicorn_rails) Errno::ENOENT: No such file or directory @ rb_sysopen - /var/www/rails/match-you/config/unicorn.conf.rb /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/configurator.rb:84:in `read' /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/configurator.rb:84:in `reload' /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/configurator.rb:77:in `initialize' /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:77:in `new' /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:77:in `initialize' /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/bin/unicorn_rails:209:in `new' /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/bin/unicorn_rails:209:in `<top (required)>' /home/ec2-user/.rbenv/versions/2.6.5/bin/unicorn_rails:23:in `load' /home/ec2-user/.rbenv/versions/2.6.5/bin/unicorn_rails:23:in `<top (required)>' master failed to start, check stderr log for details
該当のソースコード
ターミナルのみでの作業のため同上となります。
試したこと
「check stderr log for details」のメッセージがあるので、lessコマンドを実行
[ec2-user@ip-172-31-38-172 match-you]$ less log/unicorn.stderr.log /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:205:in `pid=': Already running on PID:11935 (or pid=/var/www/match-you/tmp/pids/unicorn.pid is stale) (ArgumentError) from /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:137:in `start' from /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/bin/unicorn_rails:209:in `<top (required)>' from /home/ec2-user/.rbenv/versions/2.6.5/bin/unicorn_rails:23:in `load' from /home/ec2-user/.rbenv/versions/2.6.5/bin/unicorn_rails:23:in `<main>' I, [2021-01-08T11:25:46.370087 #11935] INFO -- : reaped #<Process::Status: pid 11943 exit 0> worker=0 I, [2021-01-08T11:25:46.370223 #11935] INFO -- : master complete I, [2021-01-08T11:27:15.438576 #12119] INFO -- : Refreshing Gem list I, [2021-01-08T11:27:16.769719 #12119] INFO -- : listening on addr=0.0.0.0:3000 fd=9 I, [2021-01-08T11:27:16.774532 #12119] INFO -- : master process ready I, [2021-01-08T11:27:16.778082 #12127] INFO -- : worker=0 ready I, [2021-01-08T12:18:19.503694 #12119] INFO -- : reaped #<Process::Status: pid 12127 exit 0> worker=0 I, [2021-01-08T12:18:19.504358 #12119] INFO -- : master complete I, [2021-01-08T12:18:52.167629 #12614] INFO -- : Refreshing Gem list I, [2021-01-08T12:18:53.952263 #12614] INFO -- : listening on addr=/var/www/match-you/tmp/sockets/unicorn.sock fd=9 I, [2021-01-08T12:18:53.960691 #12614] INFO -- : master process ready I, [2021-01-08T12:18:53.964333 #12622] INFO -- : worker=0 ready I, [2021-01-08T13:39:20.944559 #12614] INFO -- : reaped #<Process::Status: pid 12622 exit 0> worker=0 I, [2021-01-08T13:39:20.944684 #12614] INFO -- : master complete
「PID=11935が既に動いているor古い」とあるため、まずは現在のプロセスを確認しました。
[ec2-user@ip-172-31-38-172 match-you]$ ps aux | grep unicorn ec2-user 5261 0.0 0.0 119436 924 pts/0 S+ 12:34 0:00 grep --color=auto unicorn
「11935」が表示されないため、killmコマンドを実行できず。
PIDが「既に動いている」のではなく「古い」のではと思い、tmpフォルダのpidsフォルダ内の
unicorn.piというファイルが悪さをしている可能性も考えたのですが、
そもそも上記ファイルの存在を確認できませんでした。
これ以上の打ち手分からず質問させて頂いております。
初質問のため回答頂くにあたり不足点もあるかと思われます。
抜けている視点や他に試した方が良いことなどご教示頂けますと幸いです。
その他、効果有無は分からなかったのですが以下も実行致しました(いずれも効果なし)。
・ローカル、リモート環境での差分の有無確認(git push origin master, git pull origin masterの実行)
・インスタンスの再起動
・ターミナルの再起動
補足情報(FW/ツールのバージョンなど)
ruby 2.6.5
rails 6.0.0
unicorn 5.4.1
unicorn.rb ※自動デプロイまではスクールのカリキュラムを参考に「unicorn.rb」ファイルで進めていました。ドメイン取得以降は別の記事を参照していたため、unicorn.conf.rbコマンドで実行してしまっていました。。
unicorn
1#サーバ上でのアプリケーションコードが設置されているディレクトリを変数に入れておく 2app_path = File.expand_path('../../../', __FILE__) # 「../」が一つ増えている 3 4#アプリケーションサーバの性能を決定する 5worker_processes 1 6 7#アプリケーションの設置されているディレクトリを指定 8working_directory "#{app_path}/current" # 「current」を指定 9 10#Unicornの起動に必要なファイルの設置場所を指定 11pid "#{app_path}/shared/tmp/pids/unicorn.pid" # 「shared」の中を参照するよう変更 12 13#ポート番号を指定 14listen "#{app_path}/shared/tmp/sockets/unicorn.sock" # 「shared」の中を参照するよう変更 15 16#エラーのログを記録するファイルを指定 17stderr_path "#{app_path}/shared/log/unicorn.stderr.log" # 「shared」の中を参照するよう変更 18 19#通常のログを記録するファイルを指定 20stdout_path "#{app_path}/shared/log/unicorn.stdout.log" # 「shared」の中を参照するよう変更 21 22#Railsアプリケーションの応答を待つ上限時間を設定 23timeout 60 24 25#以下は応用的な設定なので説明は割愛 26 27preload_app true 28GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true 29 30check_client_connection false 31 32run_once = true 33 34before_fork do |server, worker| 35 defined?(ActiveRecord::Base) && 36 ActiveRecord::Base.connection.disconnect! 37 38 if run_once 39 run_once = false # prevent from firing again 40 end 41 42 old_pid = "#{server.config[:pid]}.oldbin" 43 if File.exist?(old_pid) && server.pid != old_pid 44 begin 45 sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU 46 Process.kill(sig, File.read(old_pid).to_i) 47 rescue Errno::ENOENT, Errno::ESRCH => e 48 logger.error e 49 end 50 end 51end 52 53after_fork do |_server, _worker| 54 defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection 55end
deploy
1# capistranoのバージョンを記載。固定のバージョンを利用し続け、バージョン変更によるトラブルを防止する 2lock '3.15.0' 3 4# Capistranoのログの表示に利用する 5set :application, 'match-you' 6 7# どのリポジトリからアプリをpullするかを指定する 8set :repo_url, 'git@github.com:yutaro-kugishima/match-you.git' 9 10# バージョンが変わっても共通で参照するディレクトリを指定 11set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads') 12 13set :rbenv_type, :user 14set :rbenv_ruby, '2.6.5' #カリキュラム通りに進めた場合、’2.6.5’ です 15 16# どの公開鍵を利用してデプロイするか 17set :ssh_options, auth_methods: ['publickey'], 18 keys: ['~/.ssh/sample.pem'] 19 20# プロセス番号を記載したファイルの場所 21set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" } 22 23# Unicornの設定ファイルの場所 24set :unicorn_config_path, -> { "#{current_path}/config/unicorn.rb" } 25set :keep_releases, 5 26 27# デプロイ処理が終わった後、Unicornを再起動するための記述 28after 'deploy:publishing', 'deploy:restart' 29namespace :deploy do 30 task :restart do 31 invoke 'unicorn:restart' 32 end 33end
回答2件
あなたの回答
tips
プレビュー