Forum: Italian Ruby user group Net::FTP impossibile caricare file

1763e22b12ab11dcfd0d079a7b893177?d=identicon&s=25 Yuri Redaelli (yuri80)
on 2013-07-01 14:55
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.
F8990e1991980f60be9ab371a214a21d?d=identicon&s=25 Federico Ravasio (razielgn)
on 2013-07-01 15:07
(Received via mailing list)
On Monday, July 1, 2013 at 2:55 PM, Yuri Redaelli 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
> Ml@lists.ruby-it.org (mailto:Ml@lists.ruby-it.org)
> 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] http://ruby-doc.org/stdlib-1.9.3/libdoc/net/ftp/rd...
[2]
https://en.wikipedia.org/wiki/File_Transfer_Protoc...
Eda3d93f49a394d603bd5ecd7c821269?d=identicon&s=25 Andrea Pavoni (apeacox)
on 2013-07-01 15:12
(Received via mailing list)
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 Redaelli
<yuri.redaelli@vidiemme.it> 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
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml

--
http://andreapavoni.com
1763e22b12ab11dcfd0d079a7b893177?d=identicon&s=25 Yuri Redaelli (yuri80)
on 2013-07-02 08:08
Vi ringrazio,

in effetti è bastato specificare la modalità passiva.

;)
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.