3

我有一个远程 ftp 服务器。
我可以使用 Cyber​​Duck 或终端 ftp 客户端连接到它。

尝试连接时,Net::FTP我可以这样做:

ftp=Net::FTP.new
ftp.connect('url', 'port')
ftp.login('username', 'password')

但是,这样做:

Net::FTP.open('url', 'username', 'password')

返回Errno::ECONNREFUSED: Connection refused - connect(2)

似乎.open不接受端口参数,因为我使用自定义端口,所以导致我出错。但是我需要使用.open方法,因为它用于我使用的外部gem(carrierwave-webdav)。
这个有什么解决方法,还是我应该创建自己的叉子?
如何使用.open方法连接到我的 ftp?

4

3 回答 3

4

If you pass host argument to Net::FTP.new or mandatory to Net::FTP.open it tries to connect immediately so you have to pass non-standard port number in other way like passing together with a hostname:

Net::FTP.open('url:port', 'username', 'password')

UPDATE: Ruby net library unfortunately doesn't parse host string so you need perform all connection steps separately:

ftp = Net::FTP.new  # don't pass hostname or it will try open on default port
ftp.connect('url', port)  # here you can pass a non-standard port number
ftp.login('username', 'password')
ftp.passive = true  # optional, if PASV mode is required
于 2013-10-02T10:24:15.067 回答
2

@jackbot 的回答是正确的,设置示例代码FTP_PORT非常简单:

Net::FTP.send(:remove_const, 'FTP_PORT') # just to avoid warnings
Net::FTP.const_set('FTP_PORT', 22222)

其中 22222 是新的 ftp 端口。

完整的链条是:open调用new,调用connect,使用FTP_PORT。您可以在此处查看源代码:http: //docs.ruby-lang.org/en/2.0.0/Net/FTP.html#method-c-new

于 2015-08-21T14:25:04.670 回答
1

似乎在后台Net::FTP::open调用Net::FTP::connect,它连接到常量中设置FTP_PORT的端口。这不是一个很好的解决方案,但您可以将该常量设置为您需要的端口。

于 2013-10-02T10:17:18.340 回答