1. ホーム
  2. ruby

Capistrano v3でサーバー上のシェルコマンドを実行するには?

2023-11-19 15:24:06

質問

Capistranoの初心者ですが、CapistranoのDSLを使ってサーバー上でシェルコマンドを実行('run'、'execute'など)しようとしましたが、非推奨になったようです。機能的な同等のものを検索して探した結果、私はまだ迷っています。

現在のコードです。

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

どのように解決するのですか?

Capistrano v3では、コードを実行する場所を指定するために on をホスト名のリストで呼び出すことで、コードを実行したい場所を指定する必要があります。

task :execute_on_server do
  on "[email protected]" do
    execute "some_command"
  end
end

ロールが設定されている場合は roles メソッドを使うと便利です。

role :mailserver, "[email protected]"

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

ここにv3のドキュメントがあります。 http://www.capistranorb.com/