[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Net::FTP.new silently failing in block form

Daniel Berger

10/10/2006 2:30:00 PM

Hi all,

Ruby 1.8.5

I'm hitting some odd behavior with Net::FTP.new. I'm connecting to a
Win2k3 server (running IIS 6, if that matters). The directory style is
set to "UNIX", and the ftp server is in passive mode.

I'm trying to "put" a simple text file. When I use the block form of
FTP.new nothing happens. No error, but the text file is not ftp'd to
the remote machine. When I use the non-block form, everything works
fine.

Sampe script:

# This fails
require "net/ftp"
include Net

file = "test.txt"

FTP.new(host){ |ftp|
ftp.passive = true
ftp.login(user, pass)
ftp.chdir(dir)
ftp.put(file)
}

However, this snippet works just fine:

ftp = FTP.new(host)
ftp.passive = true
ftp.login(user, pass)
ftp.chdir(dir)
ftp.put(file)
ftp.close

Note that the "ftp.passive = true" had no effect one way or another.
Looking at the source code for Net::FTP revealed nothing out of the
ordinary. I ran the same script from both a Linux machine and a
Windows XP box and got the same behavior, so I don't think it's a line
ending issue.

Has anyone seen this before?

Thanks,

Dan

5 Answers

ts

10/10/2006 2:39:00 PM

0

>>>>> "D" == Daniel Berger <djberg96@gmail.com> writes:

D> FTP.new(host){ |ftp|
^^^
open

D> ftp.passive = true


Guy Decoux

Daniel Berger

10/10/2006 2:45:00 PM

0


ts wrote:
> >>>>> "D" == Daniel Berger <djberg96@gmail.com> writes:
>
> D> FTP.new(host){ |ftp|
> ^^^
> open
>
> D> ftp.passive = true

You're right, that does work. But, based on the source, why would that
make a difference? I mean, FTP.open just calls FTP.new internally,
right? The only difference seems to be that FTP.open requires a host
name.

Oh, well. I'll just use FTP.open from now on. :)

Regards,

Dan

Jamey Cribbs

10/10/2006 2:51:00 PM

0

Daniel Berger wrote:
> Hi all,
>
> Ruby 1.8.5
>
> I'm hitting some odd behavior with Net::FTP.new. I'm connecting to a
> Win2k3 server (running IIS 6, if that matters). The directory style is
> set to "UNIX", and the ftp server is in passive mode.
>
> I'm trying to "put" a simple text file. When I use the block form of
> FTP.new nothing happens. No error, but the text file is not ftp'd to
> the remote machine. When I use the non-block form, everything works
> fine.
>
> Sampe script:
>
> # This fails
> require "net/ftp"
> include Net
>
> file = "test.txt"
>
> FTP.new(host){ |ftp|
> ftp.passive = true
> ftp.login(user, pass)
> ftp.chdir(dir)
> ftp.put(file)
> }
>
> However, this snippet works just fine:
>
> ftp = FTP.new(host)
> ftp.passive = true
> ftp.login(user, pass)
> ftp.chdir(dir)
> ftp.put(file)
> ftp.close
>
> Note that the "ftp.passive = true" had no effect one way or another.
> Looking at the source code for Net::FTP revealed nothing out of the
> ordinary. I ran the same script from both a Linux machine and a
> Windows XP box and got the same behavior, so I don't think it's a line
> ending issue.
>
I looked at ruby-doc.org and it looks like new does not take an optional
block whereas open does.

Jamey

Confidentiality Notice: This email message, including any attachments, is for the sole use of the intended recipient(s) and may contain confidential and/or privileged information. If you are not the intended recipient(s), you are hereby notified that any dissemination, unauthorized review, use, disclosure or distribution of this email and any materials contained in any attachments is prohibited. If you receive this message in error, or are not the intended recipient(s), please immediately notify the sender by email and destroy all copies of the original message, including attachments.

ts

10/10/2006 2:53:00 PM

0

>>>>> "D" == Daniel Berger <djberg96@gmail.com> writes:

D> You're right, that does work. But, based on the source, why would that
D> make a difference? I mean, FTP.open just calls FTP.new internally,
D> right? The only difference seems to be that FTP.open requires a host
D> name.

We don't have the same source

def FTP.open(host, user = nil, passwd = nil, acct = nil)
if block_given?
# ^^^^^^^^^^^^
ftp = new(host, user, passwd, acct)
begin
yield ftp
# ^^^^^^^^^
ensure
ftp.close
end
else
new(host, user, passwd, acct)
end
end



Guy Decoux

Daniel Berger

10/10/2006 2:54:00 PM

0


Jamey Cribbs wrote:
> Daniel Berger wrote:
> > Hi all,
> >
> > Ruby 1.8.5
> >
> > I'm hitting some odd behavior with Net::FTP.new. I'm connecting to a
> > Win2k3 server (running IIS 6, if that matters). The directory style is
> > set to "UNIX", and the ftp server is in passive mode.
> >
> > I'm trying to "put" a simple text file. When I use the block form of
> > FTP.new nothing happens. No error, but the text file is not ftp'd to
> > the remote machine. When I use the non-block form, everything works
> > fine.
> >
> > Sampe script:
> >
> > # This fails
> > require "net/ftp"
> > include Net
> >
> > file = "test.txt"
> >
> > FTP.new(host){ |ftp|
> > ftp.passive = true
> > ftp.login(user, pass)
> > ftp.chdir(dir)
> > ftp.put(file)
> > }
> >
> > However, this snippet works just fine:
> >
> > ftp = FTP.new(host)
> > ftp.passive = true
> > ftp.login(user, pass)
> > ftp.chdir(dir)
> > ftp.put(file)
> > ftp.close
> >
> > Note that the "ftp.passive = true" had no effect one way or another.
> > Looking at the source code for Net::FTP revealed nothing out of the
> > ordinary. I ran the same script from both a Linux machine and a
> > Windows XP box and got the same behavior, so I don't think it's a line
> > ending issue.
> >
> I looked at ruby-doc.org and it looks like new does not take an optional
> block whereas open does.
>
> Jamey

Oh, you're right!

/me slaps self.

Thanks Jamey and Guy.

- Dan