2017-03-25 1 views
18

Ich habe versucht, meine Rails-Site mit capistrano zu implementieren. So wenn ich liefIch weiß nicht, wie man die Aufgabe 'start' erstellt, wenn 'cap production deploy' für capistrano 3.8.0 mit Rails ausgeführt wird

cap production deploy 

Dies ist, was ich erhielt

(Backtrace restricted to imported tasks) 
cap aborted! 
Don't know how to build task 'start' (see --tasks) 

Tasks: TOP => production 

Diese Datei meine Kappe ist

# Load DSL and Setup Up Stages 
require 'capistrano/setup' 
require 'capistrano/deploy' 

require 'capistrano/rails' 
require 'capistrano/bundler' 
require 'capistrano/rvm' 
require 'capistrano/puma' 
require 'capistrano/scm/git' 

install_plugin Capistrano::SCM::Git 

# Loads custom tasks from `lib/capistrano/tasks' if you have any defined. 
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r } 

Das ist mein deploy.rb

set :repo_url,  'xxx' 
set :application,  'xxx' 
set :user,   'yyy' 
set :puma_threads, [4, 16] 
set :puma_workers, 0 

set :pty,    true 
set :use_sudo,  false 
set :stages,   ["staging", "production"] 
set :default_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) } 
set :puma_preload_app, true 
set :puma_worker_timeout, nil 
set :puma_init_active_record, true # Change to false when not using ActiveRecord 

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 

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

So Der obige Code funktioniert Aber wenn ich meine Edelsteine ​​aktualisiere, kann ich meine App nicht mehr bereitstellen.

Also wie kann ich das beheben?

Danke!

Antwort

59

Fügen Sie install_plugin Capistrano::Puma in Ihr Capfile nach require 'capistrano/puma' hinzu.

capistrano3-puma vor ein paar Tagen auf 3.0 verschoben. Diese Zeile wird zum Laden von Puma-Standardaufgaben in dieser Version benötigt.

Siehe https://github.com/seuros/capistrano-puma#usage

+0

danke. Können Sie uns sagen, wie Sie dieses Problem gelöst haben, da die Fehlermeldung so kryptisch war? – sandre89

+1

@ sandre89 Ich habe das gleiche Projekt nur ein paar Wochen vor diesem Ereignis implementiert. Nach vielem Googlen, aber ohne Antworten, fange ich an zu finden, was sich zwischen diesen beiden Deployments geändert hat. Ich habe bemerkt, dass die meisten Edelsteine ​​in meinem Gemfile eine Versionsbeschränkung haben, mit Ausnahme der Capistrano-Erweiterungsgruppe. Also habe ich die Sperrdatei und die Geschichte dieser Edelsteine ​​auf [rubygems.org] (https://rubygems.org/gems/capistrano3-puma/) überprüft und ein Hauptversions-Upgrade für 'capistrano3-puma' gefunden. Dann hat das Befolgen des Dokuments diesen Fehler behoben. – Jin

+0

Ich wünschte, ich könnte dir ein Bier dafür kaufen. Vielleicht kann ich dir etwas Bargeld schicken? – Augusto

Verwandte Themen