Ответ 1
Они переключились с .cap
на .rake
3 месяца назад.
Вся идея состоит в том, чтобы сделать capistrano3
полностью rake-compatible
. Просто используйте расширение .rake
для выполнения задач.
Я пытаюсь научиться использовать Capistrano 3, следуя DOCS, и я написал простую задачу, чтобы проверить мое понимание.
Задача создается в каталоге task
по умолчанию lib/capistrano/tasks
:
desc "Check status of web server"
task :nginx_status do
on roles(:web) do |host|
execute 'service nginx status'
end
end
Мой файл config/deploy/staging.rb
содержит следующее:
set :stage, :staging
role :web, "192.168.0.11"
role :app, "192.168.0.11"
role :db, "192.168.0.11", primary:true
server '192.168.0.11', user: 'vagrant', roles: %w{web app}
Capfile
# Load DSL and Setup Up Stages
require 'capistrano/setup'
# Includes default deployment tasks
require 'capistrano/deploy'
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
My deploy.rb
содержит имя приложения и URL-адрес репо для github.
Когда я запускаю cap staging nginx_status
, я получаю следующую ошибку:
** Invoke staging (first_time)
** Execute staging
** Invoke load:defaults (first_time)
** Execute load:defaults
cap aborted!
Don't know how to build task 'nginx_status'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/task_manager.rb:62:in `[]'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/application.rb:149:in `invoke_task'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/application.rb:106:in `each'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/application.rb:106:in `block in top_level'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/application.rb:115:in `run_with_threads'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/application.rb:100:in `top_level'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/application.rb:78:in `block in run'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/application.rb:176:in `standard_exception_handling'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rake-10.3.1/lib/rake/application.rb:75:in `run'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/capistrano-3.2.1/lib/capistrano/application.rb:15:in `run'
/Users/H/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/capistrano-3.2.1/bin/cap:3:in `<top (required)>'
/Users/H/.rbenv/versions/2.1.1/bin/cap:23:in `load'
/Users/H/.rbenv/versions/2.1.1/bin/cap:23:in `<main>'
Я также заметил, что если я запустил cap -vT
, задача nginx_status
отсутствует в списке (?)
С одной стороны, - это ключи SSH, которые необходимо для подключения к удаленным серверам?
Я обнаружил, что если я ставил свою задачу в config/deploy.rb
, она работает. Итак, вопрос, который у меня сейчас есть, - как вы запускаете задачи из каталога задач?
В соответствии с Capfile в директории tasks
отображается следующее:
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
Итак, я изменил расширение задачи на .rake
, и он сработал. Однако в документации говорится, что это должно быть .cap
Они переключились с .cap
на .rake
3 месяца назад.
Вся идея состоит в том, чтобы сделать capistrano3
полностью rake-compatible
. Просто используйте расширение .rake
для выполнения задач.