强制 Gibbon Gem(或 Faraday)在 Heroku 上使用 QuotaGuard 静态 HTTP 代理

Forcing Gibbon Gem (or Faraday) to use QuotaGuard Static HTTP proxy on Heroku

完整免责声明;我不是一个强大的 Ruby 开发者,但我学得很快 :)

我在 Heroku dyno 上设置了一个简单的 Ruby 脚本,用于侦听来自我们捐赠平台的调用。

进行捐赠后,它会到达我的应用程序中的一个 webhook 端点,然后通过 Mandrill(工作正常)发送捐赠收据,并 updates/inserts Mailchimp 列表中的一条记录,通过 'upsert'长臂猿的妙法gem.

一切正常;除非 Heroku 盒子碰巧出现在过去做过坏事的 IP 地址上,并且 Mailchimp 的 API 因 403(禁止)错误而掉线。

我已经得到 Mailchimp API 团队的确认;他们建议使用 QuotaGuard Static 之类的东西将 API 请求通过隧道传送到 Mailchimp,从而消除来自不一致(有时是不受信任的)IP 地址的 API 调用的问题。

我希望得到一些关于如何实现这一目标的建议。我可以看到 Gibbon 使用 Faraday 来处理 HTTP 请求,但我还不够高级 Ruby 开发人员无法分叉代码并添加 HTTP 代理功能。

如果有办法全局强制 Faraday 调用使用 HTTP 代理(即 QuotaGuard Static),这就是我正在寻找的。例如,法拉第的配置设置。

或者我可以对我的 Procfile 做一些调整:

web: bundle exec ruby webhooks.rb -p $PORT

...这将强制出站流量通过 QuotaGuard 静态代理。我知道 Proximo 具有此功能,但它也会阻止对该应用程序的入站访问,这不适用于此应用程序。

感谢社区可以提供的任何想法。谢谢!

根据法拉第文档 (here),Connectionclass 使用 http_proxy 环境变量中指定的代理。我从未尝试过,但查看源代码应该可以。

长臂猿作者在这里。在 Gibbon 2.2.0 及更高版本中,您可以简单地将代理值设置为代理 URL。

我想提供更多信息,因为这两个答案使我走上了正确的轨道,但仍需要我进行一些挖掘。我通过首先在 Heroku 中添加 QuotaGuard Static 附加组件(每月最多免费使用 250 次)然后像这样初始化 Gibbon 来解决这个问题:

g = Gibbon::Request.new
g.proxy = ENV["QUOTAGUARDSTATIC_URL"]

这里是 Gibbon 文档中的相关部分:https://github.com/amro/gibbon#other