让我先说这个应用程序的大部分内容是一个巨大的黑客,在压力下在短时间内组合在一起,所以我可能有更深层次的问题。这个问题可能会有一些错误的代码。
我已经构建了一个 Sinatra 应用程序来处理内部采购和销售订单的一些任务。其中一部分是将一些参数发送到应用程序中的一个路由,然后将这些参数推送到一个对它们执行有用操作的 API。
现在,我正在从 HAML 中一个非常丑陋的循环中生成带有参数的链接:
%td
- opts = JSON.generate({ "key" => d[d.keys.first]["key"], "sa_id" => d.keys.first, "site" => d[d.keys.first]["site"], "name" => d[d.keys.first]["name"], "recipient" => d[d.keys.first]["email"], "items" => d[d.keys.first]["descriptions"], "date" => d[d.keys.first]["ship_date"]})
-if (d[d.keys.first]["email"]) && (d[d.keys.first]["site"] != "")
%a{:href => "/notify?options=#{opts}", :title => "Deliver"} Deliver
-else
Deliver
%a{:href => "/destroy?key=#{d.keys.first}", :title => "Destroy"} Destroy
在本地单击“交付”链接 ( %a{:href => "/notify?options=#{opts}", :title => "Deliver"} Deliver
) 时,一切都按预期运行。我的/notify
路由被调用,它将参数传递给所需的 API,一切都是彩虹和独角兽。当我在 Heroku 上单击相同的链接时,它会抛出一个“Bad Request”,说明“Bad URI”。生成的两个 URL 之间的唯一区别是主机名(localhost:3000 与 myapp.herokuapp.com),vimdiff 证实了这一点。
其他一切都是平等的,当我的本地实例(Thin)似乎不在乎时,为什么 Heroku(使用 Webrick)会回退我的 URI?