Script Ruby para fazer FTP no Windows


Refatorando algumas tasks dos Rakefiles, precisei executar algumas tarefas de transferência de arquivos via FTP. Tentei usar os módulos socket e net, mas por qualquer motivo eles não estão funcionando no Windows.

Para contornar temporariamente o problema, resolvi usar o cliente FTP limitado que vem com o Windows, e acabei gostando da gambiarra final:

def ftp host, user, pwd
   raise "Block expected." unless block_given?
 
   File.open 'ftp.tmp', 'w' do |f|
      f.puts "open #{host}", user, pwd
      yield(f)
      f.puts 'quit'
   end
   system "ftp -s:ftp.tmp && del ftp.tmp"
end

Este método foca a simplicidade do código que o chamará, e para isso, espera que seja fornecido um bloco que definirá os comandos FTP:

task :exemplo do
   ftp "meuservidor.com.br", "login", "senha" do |cmd|
      cmd.puts "mkdir /home/henrique/tmp"
      cmd.puts "cd /home/henrique/tmp"
      cmd.puts "put arquivo.txt"
   end
end

Por limitações do cliente FTP, não é possível fazer um código interativo a partir de uma única conexão, como por exemplo, executar tarefas distintas dependendo do conteúdo verificado em um diretório remoto.

É um snippet bem simples, mas tem se mostrado muito útil por aqui! Quando descobrir porque o socket não funciona eu publico a solução.

, , , ,

  1. Nenhum comentário ainda.
(não será publicado)