【发布时间】:2012-05-27 09:33:48
【问题描述】:
我正在尝试将 Paypal IPN 通知集成到部署到 Heroku (bamboo-mri-1.9.2) 的 Rails 3.0.10 应用程序中。这不是我第一次将 IPN 集成到 Rails 应用程序中,但我遇到了一个让我发疯的问题,此时我一无所知。
我在 config/routes.rb 中为 IPN 定义了一个特殊的路由:
match "/paypal_ipn" => "registrations#paypal_ipn", :as => :paypal_ipn
而我在RegistrationController中有相应的动作:
class RegistrationsController < ApplicationController
include ActiveMerchant::Billing::Integrations
...
def paypal_ipn
// Notification management stuff...
end
end
问题是,一旦应用程序部署到 Heroku,我就无法向此 URL 发送 IPN 通知,因为服务器总是以 503 错误响应 IPN 模拟器。奇怪的是,我可以使用 CURL 或任何浏览器成功地向该 URL 发送任何 POST 或 GET 请求。
我什至用raise "It exploded!" 替换了paypal_ipn 方法的内容,没有任何异常出现在日志中,并跳过了我见过的所有之前的过滤器,结果相同。
我只能在 heroku 日志上看到这些,但这对我没有多大帮助...
2012-05-20T17:32:47+00:00 heroku[router]: Error H13 (Connection closed without response) -
> POST reddeportiva-sta.heroku.com/paypal_ipn dyno=web.1 queue= wait= service= status=503
bytes=2012-05-20T17:32:47+00:00 app[web.1]: !! Unexpected error while processing request:
undefined method `include?' for nil:NilClass
2012-05-20T17:32:47+00:00 heroku[nginx]: 173.0.82.126 - - [20/May/2012:17:32:47 +0000]
"POST /paypal_ipn HTTP/1.0" 503 607 "-" "-" reddeportiva-sta.heroku.com
有人知道 Paypal IPN 通知消息是否有任何与简单 CURL POST 请求不同的特殊内容,而这可能会导致这场噩梦?
编辑 好吧,我已经找到了问题的根源,但我仍在调查解决方案。
我正在使用 rack-iframe (http://rubygems.org/gems/rack-iframe) 让我的用户在其网页上的 iframe 内登录和维护会话。
Paypal IPN 消息中似乎有些东西导致 rack-iframe 崩溃。我会进一步调查并分享我的发现。
这是一个非常奇怪的错误......
编辑 2 我已经向 rack-iframe 创建者发送了一个带有这个问题的小修复的拉取请求,所以我认为这个问题已经解决了 :-) https://github.com/merchii/rack-iframe/pull/1
【问题讨论】:
标签: ruby-on-rails heroku paypal paypal-ipn