AFAICS、この問題はCapistranoのバグのようです。だから、防弾少年団に報告してください。
Capistrano::Shell::exec_command()
とにかく、独自のcap
コマンドでプライベートメソッドをオーバーライドすることで、この問題を回避できます。
- と呼ばれるファイルを作成します
mycap.rb
- オリジナルをコピー
/usr/bin/cap
しますmycap.rb
- 追加
require 'capistrano/shell'
- あなた
exec_command()
のmycap.rb
/\bsudo\b/
正規表現を次のようなものに置き換えます/^sudo\b/
- 元のコマンド
mycap.rb
の代わりに実行するcap
mycap.rbの内容は次のようになります。
#!/usr/bin/env ruby
require 'capistrano/cli'
require 'capistrano/shell'
module Capistrano
class Shell
private
def exec_command(command, servers)
command = command.gsub(/^sudo\b/, "sudo -p '#{configuration.sudo_prompt}'")
processor = configuration.sudo_behavior_callback(Configuration.default_io_proc)
sessions = servers.map { |server| configuration.sessions[server] }
options = configuration.add_default_command_options({})
cmd = Command.new(command, sessions, options.merge(:logger => configuration.logger), &processor)
previous = trap("INT") { cmd.stop! }
cmd.process!
rescue Capistrano::Error => error
warn "error: #{error.message}"
ensure
trap("INT", previous)
end
end
end
Capistrano::CLI.execute
これはinに\b
置き換えられていることに注意してください。しかし、他のすべては同じです。^
command.gsub()