0

让我先说这个应用程序的大部分内容是一个巨大的黑客,在压力下在短时间内组合在一起,所以我可能有更深层次的问题。这个问题可能会有一些错误的代码。

我已经构建了一个 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?

4

2 回答 2

1

在 Heroku 上从 Webrick 切换到 Thin 解决了这个问题,但我不确定具体原因

于 2012-11-20T20:09:01.893 回答
0

我们遇到了一些问题,即看似相同的开发和生产环境在部署到 heroku 后表现不同。我喜欢做的快速健全性检查是在部署过程完成后将本地 gemfile.lock 与 heroku 上的进行比较。我知道 - 我们应该更严格地锁定我们的 gem 版本,我们会这样做,所以不要认为这是一个最佳实践 - 但它发现了一些难以追踪的问题,其中一些与我们有一些开发人员的事实有关在 Windows 和 Mac 上,gemfile.lock 通常有 Windows 特定的 gem,这会导致 heroku 出现问题。只是需要考虑的事情。

于 2012-11-21T10:35:22.653 回答