【问题标题】:Sinatra haml page is called twiceSinatra haml 页面被调用两次
【发布时间】:2012-10-22 07:59:41
【问题描述】:
  get '/test' do
     session[:my_session_id] = generate_random_id()
     puts 'begin haml debug'
     haml :"static/haml_page", :locals=>{:session_id => session[:my_session_id]}
  end

我在日志中看到上面的页面经常被调用两次:

begin haml debug
127.0.0.1 - - [02/Nov/2012 00:00:01] "GET / HTTP/1.1" 200 4317 1.5421
127.0.0.1 - - [02/Nov/2012 00:00:01] "GET /js/base/jquery.pjax.002902.js HTTP/1.1" 304 - 0.0234
[2012-11-02 00:00:01] WARN  Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
127.0.0.1 - - [02/Nov/2012 00:00:01] "GET /css/docs.002902.css HTTP/1.1" 200 165 0.1086
.................................
begin haml debug
127.0.0.1 - - [02/Nov/2012 00:00:04] "GET / HTTP/1.1" 200 4317 1.9288

这让我有一些问题。为什么会这样?

【问题讨论】:

  • 当您尝试使用其他浏览器或 curl 时是否会发生这种情况?例如curl http://localhost:9292
  • 不,它没有! Chrome 请求它两次。为什么?
  • 您的路线显示get '/test',但您的日志显示GET /。您是否将示例与真实的示例进行了更改?
  • 是的,这只是一个错字。 Opera 不会两次请求页面。
  • 如果 Chrome 请求了两次,请尝试其他 Webkit 浏览器,例如 Safari,看看它是否也在其中。我不知道为什么 Chrome 会这样做,但至少你正在缩小范围。

标签: ruby sinatra haml rack webrick


【解决方案1】:

由于类似的问题,我已移至 Webrick 安装的 Puma 服务器。 不幸的是,我丢失了这个问题的示例代码。 无论如何,如果您遇到此类问题,请了解 brouser 是做什么的:

  1. 开发者工具 > 网络(选项卡)将显示请求的确切来源(如果存在)
  2. 尝试通过减少代码来缩小此问题/错误,即注释所有 JavaScript,将页面内容更改为“Hello Wold”并观察问题仍然存在
  3. 分享你的代码:)

很抱歉在这里发帖,我不知道如何将其发布为您问题的补充。

【讨论】:

    【解决方案2】:

    这是一个 hack,但如果你真的需要让它只运行一次代码: 创建一个全局布尔变量。在路线中,将所有内容包装在布尔值的条件中。如果为 false,请将其设置为 true,运行您的代码,然后再次将其设置为 false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 2016-04-01
      • 2012-05-05
      • 2017-01-19
      • 2014-02-04
      相关资源
      最近更新 更多