2017-06-26 15 views
2

私はRails 5アプリケーションをAWS EC2インスタンスにデプロイするためにCapistranoを使用しています。私が入力したとき:Capistrano puma:再起動しませんが、puma:startは

cap production deploy 

事はスムーズに進み、展開は成功です。しかし、プーマを再起動するプロセスは機能していません。私のように見る最後のタスク:

puma:restart 
     01 ~/.rvm/bin/rvm ruby-2.4.0 do bundle exec pumactl -S /home/deploy/myapp/shared/tmp/pids/puma.state -F /home/deploy/myapp/s… 
     01 Command restart sent success 

しかし、私は私のウェブサイトを訪問したときに、私は以下を参照してください

502 Bad Gateway 
nginx/1.4.6 (Ubuntu) 

cap production puma:statusを行うには、プーマが実行されていないことを私に警告します。興味深いことに、cap production puma:start次エコーで完璧に動作します:私は問題が何であるかを見つけるためにしようとして数時間を費やしている

puma:start 
     using conf file /home/deploy/myapp/shared/puma.rb 
     01 ~/.rvm/bin/rvm ruby-2.4.0 do bundle exec puma -C /home/deploy/myapp/shared/puma.rb --daemon 
     01 Puma starting in single mode... 
     01 
     01 * Version 3.9.1 (ruby 2.4.0-p0), codename: Private Caller 
     01 
     01 * Min threads: 0, max threads: 8 
     01 
     01 * Environment: production 
     01 
     01 * Daemonizing... 
     01 

。再起動やphased_restartタスクの代わりにPumaサーバーを起動すると、問題を回避できます。しかし、これを引き起こす原因は何ですか?私は2週間前に同様のアプリをデプロイしました(APIのみのアプリでした)、問題なく動作しました。ここで

は私deploy.rbです:

lock "3.8.2" 

set :application, "myapp" 
set :repo_url, "[email protected]:myorg/myapp.git" 

# set :branch, :master 
set :branch, :release 
set :deploy_to, '/home/deploy/myapp' 
set :pty, true 
set :linked_files, %w{config/database.yml config/application.yml} 
# set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads} 
set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads} 

set :keep_releases, 5 
set :rvm_type, :user 
set :rvm_ruby_version, 'ruby-2.4.0' 

set :puma_rackup, -> { File.join(current_path, 'config.ru') } 
set :puma_state, "#{shared_path}/tmp/pids/puma.state" 
set :puma_pid, "#{shared_path}/tmp/pids/puma.pid" 
set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock" 
set :puma_conf, "#{shared_path}/puma.rb" 
set :puma_access_log, "#{shared_path}/log/puma_error.log" 
set :puma_error_log, "#{shared_path}/log/puma_access.log" 
set :puma_role, :app 
set :puma_env, fetch(:rack_env, fetch(:rails_env, 'production')) 
set :puma_threads, [0, 8] 
set :puma_workers, 0 
set :puma_worker_timeout, nil 
set :puma_init_active_record, true 
set :puma_preload_app, false 

私のconfig /展開/ production.rb:

server 'myapp.com', user: 'deploy', roles: %w{web app db} 

マイpuma.rb:

#!/usr/bin/env puma 

directory '/home/deploy/myapp/current' 
rackup "/home/deploy/myapp/current/config.ru" 
environment 'production' 
daemonize true 

tag '' 

pidfile "/home/deploy/myapp/shared/tmp/pids/puma.pid" 
state_path "/home/deploy/myapp/shared/tmp/pids/puma.state" 
stdout_redirect '/home/deploy/myapp/shared/log/puma_error.log', '/home/deploy/myapp/shared/log/puma_access.log', true 

threads 0,8 

bind 'unix:///home/deploy/myapp/shared/tmp/sockets/puma.sock' 

workers 0 
prune_bundler 

on_restart do 
    puts 'Refreshing Gemfile' 
    ENV["BUNDLE_GEMFILE"] = "/home/deploy/myapp/current/Gemfile" 
end 

私は本当に立ち往生していますここに。数時間の研究の後でさえ、私はうまくいく解決策を見つけることができません!

+1

capistrano3-pumaの宝石のバグであるようです:https://github.com/seuros/capistrano-puma/issues/237 –

+0

リンクがありがとうございました。それは私の心を安心させます。 この問題を解決する過程で、私はイライラしていましたが、カピストラーノについて何も知らないことから、それについて公正なアイデアを得ることに行きました。問題が修正されるまで、私は仕事をモッキーにしました。私は猿パッチを答えとして共有しています - あなたがこれが良いと思うか、より良い選択肢があるかどうかを私に知らせてください。 – arunt

答えて

1

Mattのコメントで指摘されているように、これは報告されたバグであるようです。私は猿にパッチを当てました:これが修正されるまで、一時的な解決策としてタスクを再開してください。

私が作成した/lib/capistrano/tasks/overwrite_restart.rake:カピストラーノ-PUMAの宝石でregister_hooks方法を、そしてpuma:stoppuma:restartを置き換える:代替、私たちは上書きする可能性が推測として

namespace :puma do 
    Rake::Task[:restart].clear_actions 

    desc "Overwritten puma:restart task" 
    task :restart do 
    puts "Overwriting puma:restart to ensure that puma is running. Effectively, we are just starting Puma." 
    puts "A solution to this should be found." 
    invoke 'puma:stop' 
    invoke 'puma:start' 
    end 
end 

およびpuma:start

関連する問題