2016-10-01 8 views
5

मैंने कैपिस्ट्रानो के माध्यम से सर्वर पर रेल ऐप को तैनात करने की कोशिश की। यह तो जब मैं भागा 'टोपी उत्पादन की तैनाती' सब कुछ सुचारू रूप से अपनी साइट को सफलतापूर्वक तैनात किया जा सकता काम है लेकिन मैं उस के बाद एक संदेश मिला deploy.rb'प्यूमा: रीस्टार्ट' दो बार आह्वान करता है लेकिन मैं इसे केवल एक बार कैपिस्ट्रानो के माध्यम से अपने तैनाती ऐप पर कॉल करता हूं?

set :repo_url,  '[email protected]:varisdaOfficial/insurance_site.git' 
set :application,  'insurance_code' 
set :user,   'deploy' 
set :puma_threads, [4, 16] 
set :puma_workers, 0 

set :pty,    true 
set :use_sudo,  false 
set :stage,   :production 
set :deploy_via,  :remote_cache 
set :deploy_to,  "/home/#{fetch(:user)}/apps/#{fetch(:application)}" 
set :puma_bind,  "unix://#{shared_path}/tmp/sockets/#{fetch(:application)}-puma.sock" 
set :puma_state,  "#{shared_path}/tmp/pids/puma.state" 
set :puma_pid,  "#{shared_path}/tmp/pids/puma.pid" 
set :puma_access_log, "#{release_path}/log/puma.error.log" 
set :puma_error_log, "#{release_path}/log/puma.access.log" 
set :ssh_options,  { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa.pub) } 
set :puma_preload_app, true 
set :puma_worker_timeout, nil 
set :puma_init_active_record, true # Change to false when not using ActiveRecord 
set :linked_dirs, %w(public/uploads) 

namespace :puma do 
    desc 'Create Directories for Puma Pids and Socket' 
    task :make_dirs do 
    on roles(:app) do 
     execute "mkdir #{shared_path}/tmp/sockets -p" 
     execute "mkdir #{shared_path}/tmp/pids -p" 
    end 
    end 

    before :start, :make_dirs 
end 

namespace :deploy do 
    desc "Make sure local git is in sync with remote." 
    task :check_revision do 
    on roles(:app) do 
     unless `git rev-parse HEAD` == `git rev-parse origin/master` 
     puts "WARNING: HEAD is not the same as origin/master" 
     puts "Run `git push` to sync changes." 
     exit 
     end 
    end 
    end 

    desc 'Initial Deploy' 
    task :initial do 
    on roles(:app) do 
     before 'deploy:restart', 'puma:start' 
     invoke 'deploy' 
    end 
    end 

    desc 'Restart application' 
    task :restart do 
    on roles(:app), in: :sequence, wait: 5 do 
     invoke 'puma:restart' 
    end 
    end 

    desc 'clear temp cache' 
    task :clear_cache do 
    on roles(:app) , in: :sequence, wait: 1 do 
     execute "rm -rf #{shared_path}/tmp/cache/[^.]*" 

    end 
    end 

    before :starting,  :check_revision 
    after :finishing, :compile_assets 
    after :finishing, :cleanup 
    after :finishing, :clear_cache 
    after :finishing, :restart 
end 

पर अपने कोड है।

Capistrano tasks may only be invoked once. Since task `puma:restart' was previously invoked, 
invoke("puma:restart") at/Users/manjarb/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/capistrano3-puma-1.2.1/lib/capistrano/tasks/puma.rake:134 will be skipped. 
If you really meant to run this task again, first call Rake::Task["puma:restart"].reenable 
THIS BEHAVIOR MAY CHANGE IN A FUTURE VERSION OF CAPISTRANO. Please join the conversation here if this affects you. 
https://github.com/capistrano/capistrano/issues/1686 

मैं केवल एक बार फिर से कार्य को फिर से कॉल करता हूं। तो मैं इस संदेश को कैसे ठीक कर सकता हूं?

धन्यवाद!

उत्तर

15

मुझे लगता है कि आप capistrano3-puma मणि का उपयोग कर रहे हैं। एक सफल तैनाती के समापन पर वह मणि स्वचालित रूप से आपके लिए प्यूमा को पुनरारंभ करता है। तो यह पहली बार है कि पुनरारंभ कार्य को बुलाया जा रहा है।

इसके अतिरिक्त, आपके deploy.rb में, आपने अपना स्वयं का कस्टम पुनरारंभ कार्य परिभाषित किया है, और आप इसे after :finishing का आह्वान कर रहे हैं। यह दूसरे आमंत्रण का स्रोत है, और इस प्रकार चेतावनी।

इस समस्या को "ठीक" करने के लिए, फालतू काम निकालें:

desc 'Restart application' 
task :restart do 
    on roles(:app), in: :sequence, wait: 5 do 
    invoke 'puma:restart' 
    end 
end 

और यह निकालें:

after :finishing, :restart 
+1

मैट का जवाब सही एक है। लेकिन सिर्फ उन लोगों के लिए जिन्हें उनके कैपिस्ट्रानो कार्यों को दो बार चलाने की आवश्यकता है, आप कार्य को आह्वान के साथ बुला सकते हैं! बजाय। –

संबंधित मुद्दे