生产(Heroku)上的错误请求/错误URI,但不是本地的

时间:2012-11-20 19:48:39

标签: ruby http heroku sinatra haml

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

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

在本地点击hte“deliver”链接(%a{:href => "/notify?options=#{opts}", :title => "Deliver"} Deliver)时,一切都按预期运行。我的/notify路线被调用,它将参数传递给所需的API,一切都是彩虹和独角兽。当我在Heroku上单击相同的链接时,它会抛出一个“错误的请求”,说明“错误的URI”。生成的两个URL之间的唯一区别是主机名(localhost:3000与myapp.herokuapp.com),vimdiff确认了这一点。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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