6

Net::FTP Ruby ライブラリを使用して FTP サーバーに接続し、ファイルをダウンロードしています。すべてうまく機能しますが、ファイアウォールが IP アドレスをホワイトリストに登録しているため、アウトバウンド プロキシを使用する必要があり、Heroku を使用してサイトをホストしています。有望そうな新しい Proximo アドオンを試していますが、Net::FTP でそれを使用することができません。

Net::FTP docsに次のように表示されます。

接続 (ホスト、ポート = FTP_PORT)

ホストへの FTP 接続を確立し、オプションでデフォルト ポートをオーバーライドします。環境変数 SOCKS_SERVER が設定されている場合、SOCKS プロキシ経由で接続を設定します。接続を確立できない場合、例外 (通常は Errno::ECONNREFUSED) を発生させます。

しかし、この環境変数を設定しようとしても、設定ENV['SOCKS_SERVER'] = proximo_urlも機能しません。これを適切に行う方法を知っている人はいますか?SOCKS プロキシである必要はありません。HTTP プロキシで十分ですが、Net::FTP ライブラリがこれをサポートしているかどうかはわかりません。

...いくつかの調査の後...

Net::FTP が と呼ばれるクラスを探していることがわかりました。このクラスについては、これらのドキュメントSOCKSSocketを見つけました。しかし、私はそれを含めることはできません。false を返します。これは、既に読み込まれていることを意味していると確信しています。include 'socket'

4

3 に答える 3

1

たとえば、 socksify gem と組み合わせて使用​​できます。クォータガード。ただし、FTP と負荷分散が問題を引き起こす可能性があるため、提供された静的 IP のいずれか (DNS ホスト名ではなく) をプロキシ サーバーとして使用するようにしてください。

Socksify::debug = true
proxy_uri = URI(ENV['QUOTAGUARDSTATIC_URL'])
proxy_hostname = proxy_uri.hostname
proxy_port = 1080
TCPSocket::socks_username = proxy_uri.user
TCPSocket::socks_password = proxy_uri.password
Socksify::proxy(proxy_hostname, proxy_port) do |soc| 
       Net::FTP.open(server) do |ftp|
            ftp.passive = true
            ftp.debug_mode = true 
            ftp.login user, password
            ftp.get(export, storelocation)
            ftp.close
       end
end
于 2016-05-24T10:43:06.803 に答える