【问题标题】:Bad Request/Bad URI on production (Heroku) but not locally生产(Heroku)上的错误请求/错误 URI,但不是本地
【发布时间】:2012-11-21 18:35:22
【问题描述】:

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

我已经构建了一个 Sinatra 应用程序来处理内部采购和销售订单的一些任务。其中一部分是将一些参数发送到应用程序中的一个路由,然后将这些参数推送到一个 API,该 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 证实了这一点。

其他一切都是平等的,为什么 Heroku(使用 Webrick)会在我的本地实例(Thin)似乎不关心时回退我的 URI?

【问题讨论】:

    标签: ruby http heroku sinatra haml


    【解决方案1】:

    在 Heroku 上从 Webrick 切换到 Thin 解决了这个问题,但我不确定为什么的具体细节。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      相关资源
      最近更新 更多