Capistrano 3 exécute une commande arbitraire sur un serveur distant
Aug 28 2020
Capistrano 3 n'utilise plus la commande cap env shell.
Maintenant, nous devrions utiliser cap env console
Mais ce n'est pas interactif et on ne peut pas utiliser par exemple les touches fléchées pour l'historique ou la saisie semi-automatique sur le tabbouton
Et que dois-je faire?
Réponses
1 Alexey Aug 28 2020 at 16:44
Je suggère d'écrire votre propre petite tâche de râteau pour le faire. Utilisez la readlinegemme Tout d'abord merci de suivre les matériaux:
https://thoughtbot.com/blog/tab-completion-in-gnu-readline-ruby-edition
Comment écrire une application de ligne de commande Ruby prenant en charge la complétion des onglets?
desc "Remote console"
task :console do
require 'readline'
# https://thoughtbot.com/blog/tab-completion-in-gnu-readline-ruby-edition
host_args = (ENV['HOSTS'] || '').split(',').map { |r| r.to_sym }
role_args = (ENV['ROLES'] || '').split(',').map { |r| r.to_sym }
LIST = `ls /usr/bin`.split("\n").sort + `ls /bin`.split("\n").sort
comp = proc { |s| LIST.grep(/^#{Regexp.escape(s)}/) }
Readline.completion_append_character = " "
Readline.completion_proc = comp
while line = Readline.readline('cap> ', true)
begin
next if line.strip.empty?
exec_cmd(line, host_args, role_args)
rescue StandardError => e
puts e
puts e.backtrace
end
end
end
def exec_cmd(line, host_args, role_args)
line = "RAILS_ENV=#{fetch(:stage)} #{line}" if fetch(:stage)
cmd = "bash -lc '#{line}'"
puts "Final command: #{cmd}"
if host_args.any?
on hosts host_args do
execute cmd
end
elsif role_args.any?
on roles role_args do
execute cmd
end
else
on roles :all do
execute cmd
end
end
end
Et faites ce que vous voulez avec, bravo! =))