1

我可以在Rails應用程序中檢測多線程模式嗎?如何檢測Rails應用程序中的多線程模式?

我知道Rails並不關心多線程,它受Rack中間件控制。但是有什麼方法來檢測它?也許使用一個標誌?

我擔心將來會過渡發生在一個多線程的服務器和我的代碼將無法正常工作:

prev_zone = Time.zone 
    Time.zone = @channel.city_time_zone 
    res = Time.zone.parse(str, base_date) 
    Time.zone = prev_zone 

回答

2

似乎有是一種方法來確定你的Rails應用程序是否運行多線程或不是,但它的軌道3和4

在軌道4,5

之間略有不同,你可以這樣做:

YourApp::Application.allow_concurrency? 

和軌道3,你會以它的方式是:

YourApp::Application.config.allow_concurrency 

請注意,如果你很好奇,爲什麼那麼檢查出的源代碼(https://github.com/rails/rails/blob/master/railties/lib/rails/application/default_middleware_stack.rb#L68),你不能使用軌道中軌4.做它的3路。

,你發現了自己,有一個叫#use_zone方便的方法,通過積極提供支持:

[15] pry(main)> Time.use_zone('Sydney') { Time.zone.parse('01/01/2013 12am') }.utc 
=> 2012-12-31 13:00:00 UTC 
[16] pry(main)> Time.use_zone('Berlin') { Time.zone.parse('01/01/2013 12am') }.utc 
=> 2012-12-31 23:00:00 UTC 
[17] pry(main)> Time.use_zone('Alaska') { Time.zone.parse('01/01/2013 12am') }.utc 
=> 2013-01-01 09:00:00 UTC 

它主要實現您與未成年人例外,所採取的方式:他們使用一個線程局部變量來存儲中間時間段,以使代碼線程:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/time/zones.rb#L39

他們還使用確保塊以恢復原始時區:通過使用活性支撐氏T https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/time/zones.rb#L49

所以ime#use_zone你應該爲多線程服務器做好準備。

+0

是的,你說得對!而我忘記了http://apidock.com/rails/Time/use_zone/class :)但現在我知道allow_concurrency,謝謝! –

+0

我更新了我的答案以反映您的發現。 – Linki

相關問題