如何在 Rails 中通过代理使用 FTP?

发布于 2025-01-09 06:49:16 字数 989 浏览 0 评论 0原文

我可以使用 FileZilla 或我正在开发的 Rails 应用程序连接到我的开发计算机上的 FTP 服务器。但是,一旦我将应用程序部署到 Heroku,完全相同的连接参数就会超时。我最好的猜测是服务器阻止了包含 Heroku 或一般动态 IP 的 IP 范围。这不是配置问题,因为部署的应用程序可以毫无问题地连接到其他 FTP 服务器。

为了解决这个问题,我尝试使用 QuotaGuard 静态 URL 作为代理,我已经为其配置了该附加组件并为其设置了 ENV 变量。问题是这个静态 URL 的格式为 http://username:[电子邮件受保护]:9293

我如何使用它来处理 FTP 连接?

当前代码(在本地工作,在 Heroku 上超时):

Net::FTP.open(host, username, password) do |ftp|
    ftp.chdir(some_directory)
    # some logic here about which files to download
end

我检查了 Net::FTPNet::HTTP 的 Ruby 文档以获取更多信息。 FTP 似乎只能使用 SOCKS 代理,但 HTTP 似乎更灵活。我可以通过忽略 http:// 前缀来使用静态 URL 作为 SOCKS 代理吗?我可以重构逻辑,以便可以通过 HTTP 获取我需要的每个 FTP URL 吗?

我还研究过使用 ProxyChainRB 来执行此操作,但到目前为止还没有任何运气,因为我遇到了将代理传递到 FTP 连接的相同问题。

现有的库是否可以执行此操作?是否有我在这里没有看到的更简单的解决方案?

There is an FTP server that I can connect to on my development machine using FileZilla or the Rails app I'm working on. But as soon as I deploy the app to Heroku, the exact same connection parameters time out. My best guess is that the server blocks IP ranges that include Heroku, or dynamic IPs in general. It is not a configuration problem because the deployed app can connect to other FTP servers without issue.

To get around this problem, I'm trying to use a QuotaGuard static URL as a proxy, the add-on for which I've already provisioned and have an ENV variable for. The problem is that this static URL is in the form http://username:[email protected]:9293.

How can I use this to handle an FTP connection?

Current code (works locally, times out on Heroku):

Net::FTP.open(host, username, password) do |ftp|
    ftp.chdir(some_directory)
    # some logic here about which files to download
end

I've checked the Ruby docs for Net::FTP and Net::HTTP for more information. FTP only seems able to use a SOCKS proxy, but HTTP seems more flexible. Could I use the static URL as a SOCKS proxy by ignoring the http:// prefix? Could I restructure the logic so that I can GET each FTP URL I need via HTTP?

I've also looked into using ProxyChainRB to do this but so far not having any luck since I'm running into the same issue of passing the proxy into an FTP connection.

Are there existing libraries that do this? Is there maybe a simpler solution I'm not seeing here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文