Also habe ich daran gearbeitet. es scheint gut zu funktionieren. Sie benötigen jedoch einen Formatierer, um den Code wirklich nutzen zu können.
Wenn Sie keinen Formatierer verwenden möchten, setzen Sie die Protokollebene einfach auf den Debug-Modus. Diese semas zu h
SSHKit.config.output_verbosity = Logger::DEBUG
Cap Stuff
namespace :invoke do
desc 'Run a bash task on a remote server. cap environment invoke:bash[\'ls -la\'] '
task :bash, :execute do |_task, args|
on roles(:app), in: :sequence do
SSHKit.config.format = :supersimple
execute args[:execute]
end
end
desc 'Run a rake task on a remote server. cap environment invoke:rake[\'db:migrate\'] '
task :rake, :task do |_task, args|
on primary :app do
within current_path do
with rails_env: fetch(:rails_env) do
SSHKit.config.format = :supersimple
rake args[:task]
end
end
end
end
end
Dies ist der Formatierer, den ich erstellt habe, um mit dem obigen Code zu arbeiten. Es basiert auf dem in das sshkit integrierten: Textsimple, ist jedoch keine schlechte Methode, um benutzerdefinierte Aufgaben aufzurufen. Oh, so viele funktionieren nicht mit der neuesten Version von sshkit gem. Ich weiß, dass es mit 1.7.1 funktioniert. Ich sage dies, weil der Hauptzweig die verfügbaren SSHKit :: Command-Methoden geändert hat.
module SSHKit
module Formatter
class SuperSimple < SSHKit::Formatter::Abstract
def write(obj)
case obj
when SSHKit::Command then write_command(obj)
when SSHKit::LogMessage then write_log_message(obj)
end
end
alias :<< :write
private
def write_command(command)
unless command.started? && SSHKit.config.output_verbosity == Logger::DEBUG
original_output << "Running #{String(command)} #{command.host.user ? "as #{command.host.user}@" : "on "}#{command.host}\n"
if SSHKit.config.output_verbosity == Logger::DEBUG
original_output << "Command: #{command.to_command}" + "\n"
end
end
unless command.stdout.empty?
command.stdout.lines.each do |line|
original_output << line
original_output << "\n" unless line[-1] == "\n"
end
end
unless command.stderr.empty?
command.stderr.lines.each do |line|
original_output << line
original_output << "\n" unless line[-1] == "\n"
end
end
end
def write_log_message(log_message)
original_output << log_message.to_s + "\n"
end
end
end
end
#{rake}
Variablen von capistrano erklären ? Es scheint nicht immer die beste Option zu sein.