我正在尝试将 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 请求。
我什至paypal_ipn
用 a 替换了方法的内容,raise "It exploded!"
没有任何异常出现在日志中,并跳过了所有之前我见过的过滤器,结果相同。
我在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