Як запустити команди оболонки на сервері в Capistrano v3?


74

Я новачок у Capistrano, і я намагався використовувати DSL Capistrano для запуску команд оболонки на сервері ("запустити", "виконати" тощо), але, схоже, це застаріло. Після пошуку та пошуку функціонального еквівалента я все ще загубився.

Поточний код:

desc 'Do something'
task :do_something
  execute 'echo sometext'
end

Вихід:

    cap aborted!
    undefined method `execute' for main:Object
    /Users/Justin/Dropbox/xxxx/xxxx/xxxx/Capfile:45:in `block (2 levels) in <top (required)>'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bundler/gems/capistrano-2dc1627838f9/lib/capistrano/application.rb:12:in `run'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bundler/gems/capistrano-2dc1627838f9/bin/cap:3:in `<top (required)>'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/cap:23:in `load'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/cap:23:in `<main>'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `eval'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `<main>'
    Tasks: TOP => deploy:do_something

У мене була точно така ж проблема з методами "інформація" та "помилка" - та сама проблема, оскільки методи належать SSHKit і повинні бути в блоці SSHKit.
Dave Burt

Відповіді:


118

У Capistrano v3 ви повинні вказати, куди потрібно запустити код, зателефонувавши onзі списком імен хостів, наприклад

task :execute_on_server do
  on "root@example.com" do
    execute "some_command"
  end
end

Якщо у вас налаштовані ролі, ви можете використовувати rolesметод як зручність:

role :mailserver, "root@mail.example.com"

task :check_mail do
  on roles(:mailserver) do
    execute "some_command"
  end
end

Тут є деяка документація v3: http://www.capistranorb.com/


8
Чудово, хотілося б, щоб вони зробили це чіткіше в покроковому керівництві. Вони використовують лише тест, інформацію тощо
Jgod

2
executeМетод Капістрано покладається на реалізацію в sshkit. Зараз ви можете знайти більше інформації executeтут: github.com/leehambley/sshkit Документація Capistrano 3 все ще неповна.
Tombart

@KitHo Так, ви можете використовувати sudo, як і при ручному підключенні ssh.
Benubird

3
Коли у мене була однакова проблема з методами "інформація" та "помилка", я run_locally { ... }скоріше використовував on ... { ... }. Це потрапляє в контекст SSHKit без підключення до віддаленого вікна.
Дейв Берт,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.