Net::FTP impossibile caricare file

Ciao a tutti,

ho un problema fastidioso su del codice Ruby in un’applicazione Rails su
staging.

In sostanza: esiste un task lanciato da rake che prende un file su disco
e lo carica tramite FTP su un altro server.

Testato in sviluppo e funziona senza problemi.

Sul server di staging invece viene stabilita la connessione, esegue il
login crea il file vuoto (0 bytes) col nome corretto e poi … più
nulla!

Rimane sospesa l’operazione di put e non sembra trasferire il file
(provando a verificare con un altro client come Filezilla).

Se fosse sbagliato l’host e le credenziali dovrei avere subito errore.
Se fosse un problema di permessi non dovrebbe nemmeno scrivere il file
sul Filesystem remoto come invece fa.

Nulla il file rimane a 0 Bytes e il task Ruby “bloccato” in esecuzione.

Questo il corpo del task

begin
f = “percorso/al/nomefile.csv”
Net::FTP.open(ENV[‘ftp.host’], ENV[‘ftp.user’], ENV[‘ftp.pwd’]) do
|ftp|
ts = Time.now.strftime("%Y%m%d%H%M%S")
ftp.chdir(ENV[‘ftp.dir’]) unless ENV[‘ftp.dir’].nil?
ftp.put(f, “nomefile” + ts + “.csv”)
ftp.close()
end
File.delete(f)
rescue Exception => ex
puts "Si è verificato un errore durante il trasferimento via FTP:
" + ex.message
raise ex
end

Da cosa potrebbe dipendere?
Grazie in anticipo.

usa la modalit passiva prima di effettuareoperazioni. se stai usando
rails, questo dovrebbe funzionare:

Net::FTP.open(host, user, pass) do |ftp|
ftp.passive = Rails.env.production?

end

ciao,
A.

Il giorno 01/lug/2013, alle ore 14:55, Yuri R.
[email protected] ha scritto:

Sul server di staging invece viene stabilita la connessione, esegue il
Nulla il file rimane a 0 Bytes e il task Ruby “bloccato” in esecuzione.
ftp.close()
Da cosa potrebbe dipendere?
Grazie in anticipo.


Posted via http://www.ruby-forum.com/.


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml

On Monday, July 1, 2013 at 2:55 PM, Yuri R. wrote:

Sul server di staging invece viene stabilita la connessione, esegue il
Nulla il file rimane a 0 Bytes e il task Ruby “bloccato” in esecuzione.
ftp.close()
Da cosa potrebbe dipendere?
Grazie in anticipo.


Posted via http://www.ruby-forum.com/.


Ml mailing list
[email protected] (mailto:[email protected])
http://lists.ruby-it.org/mailman/listinfo/ml

Leggendo la doc [1] credo di aver capito che di default la connessione è
in modalità “attiva” [2], il che può creare problemi in presenza di
firewall sulla macchina client.

Ti consiglio di provare a settarla in modalità “passiva” tramite
ftp.passive = true
prima di effettuare
ftp.put(…)

In modalità passiva, il server comunica una porta al client, su cui
starà in ascolto per il trasferimento dei dati. In modalità attiva è il
contrario.

Federico

[1] Class: Net::FTP (Ruby 1.9.3)
[2]
File Transfer Protocol - Wikipedia

Vi ringrazio,

in effetti è bastato specificare la modalità passiva.

:wink: