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使用する外部宝石で使用されるため、メソッドを使用する必要があります ( carrierwave-webdav)。
これに対する回避策はありますか、それとも独自のフォークを作成する必要がありますか? メソッド
を使用して ftp に接続するにはどうすればよいですか?.open

4

3 に答える 3

4

ホスト引数を渡した場合、Net::FTP.newまたは必須のNet::FTP.open場合はすぐに接続を試みるため、ホスト名と一緒に渡すなどの別の方法で非標準のポート番号を渡す必要があります。

Net::FTP.open('url:ポート', 'ユーザー名', 'パスワード')

更新: 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
于 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です。ここでソースコードを見ることができます: http://docs.ruby-lang.org/en/2.0.0/Net/FTP.html#method-c-new .connectFTP_PORT

于 2015-08-21T14:25:04.670 に答える
1

定数で設定されたポートに接続する内部Net::FTP::open呼び出しのようです。これはあまり良い解決策ではありませんが、その定数を必要なポートに設定できます。Net::FTP::connectFTP_PORT

于 2013-10-02T10:17:18.340 に答える