使用Net::FTP实例方法“打开”用于具有自定义端口的FTP



我有一个远程ftp服务器。
我可以使用CyberDuck或终端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方法,因为它用于我使用的外部宝石(carrierwave-webdav)。
对此有什么解决方法,还是应该创建自己的分叉?
如何使用.open方法连接到我的 ftp?

如果将 host 参数传递给 Net::FTP.new 或强制传递给 Net::FTP.open它会立即尝试连接,因此您必须以其他方式传递非标准端口号,例如与主机名一起传递:

Net::

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

更新:不幸的是,Ruby 网络库不会解析主机字符串,因此您需要单独执行所有连接步骤:

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

@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。

似乎

Net::FTP::open在引擎盖下调用Net::FTP::connect,它连接到FTP_PORT常量中设置的端口。这不是一个非常好的解决方案,但您可以将该常量设置为所需的端口。

相关内容

  • 没有找到相关文章

最新更新