最终失去了Rails flash。它不是线程安全的吗?

时间:2017-08-22 10:28:34

标签: ruby-on-rails multithreading thin flash-message

我在瘦线上使用多线程运行Rails应用程序。有一堆轮询请求,有时,当并发运行集成测试时,我有大约1-2%的丢失闪存故障。在我的production.log中,如果失败,我会有以下内容:

I, [2017-08-21T23:31:51.280455 #2146]  INFO -- : Redirected to http://192.168.102.1/projects/599bcfd4875aa40862863a5b
I, [2017-08-21T23:31:51.282501 #2146]  INFO -- :   Rendered text template (0.1ms)
I, [2017-08-21T23:31:51.283151 #2146]  INFO -- : Completed 200 OK in 3062ms (Views: 1.4ms)
I, [2017-08-21T23:31:51.309004 #23906]  INFO -- :   Rendered projects/_tests_block.html.haml (24.0ms)
I, [2017-08-21T23:31:51.309392 #23906]  INFO -- :   Rendered projects/show.js.haml within layouts/application (29.9ms)
I, [2017-08-21T23:31:51.318025 #23906]  INFO -- : Completed 200 OK in 124ms (Views: 48.4ms)
I, [2017-08-21T23:31:51.318956 #2146]  INFO -- : Started GET "/projects/599bcfd4875aa40862863a5b" for 192.168.102.2 at 2017-08-21 23:31:51 -0700
I, [2017-08-21T23:31:51.321849 #2146]  INFO -- : Processing by ProjectsController#show as HTML
I, [2017-08-21T23:31:51.321994 #2146]  INFO -- :   Parameters: {"id"=>"599bcfd4875aa40862863a5b"}

我的重定向呼叫看起来像redirect_to @project, notice: success_message

在重定向和开始获取显示页面之间,我从另一页面完成了轮询请求。在这种情况下,当呈现显示页面时,没有flash[:notice]

我试图明确地保留并清除Flash,因此ApplicationController中有before_filter { flash.keep },而我的通知部分中有flash.clear

我还尝试在每次操作之前记录闪烁,并且在此并发情况下没有其他操作窃取闪存,它只是缺失。

这是多线程问题吗?或者也许我应该使用或实现具有“目的地”的闪存?所以这也应该是线程安全的。

PS Ruby 2.3.4,Rails 4.2.7,Thin 1.5.1

0 个答案:

没有答案