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

, кажется, способ, чтобы определить, работает ли ваши рельсы приложение многопоточное или нет, но немного отличается между рельсами 3 и 4.

в рельсах 4 вы можете сделать:

YourApp::Application.allow_concurrency? 

и в рельсах 3 так, как вы бы это:

YourApp::Application.config.allow_concurrency 

обратите внимание, что вы не можете использовать Рельсы 3 способа сделать это в рельсах 4. Если вам интересно, почему тогда проверить исходный код (https://github.com/rails/rails/blob/master/railties/lib/rails/application/default_middleware_stack.rb#L68).

как вы выяснили сам, есть удобный метод, называемый #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

они также используют блок обеспечения для восстановления исходного часового пояса: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/time/zones.rb#L49

так при использовании T активной поддержки в ime # use_zone, вы должны быть готовы к многопоточным серверам.

+0

Да, вы правы! И я забыл http://apidock.com/rails/Time/use_zone/class :) Но теперь я знаю о allow_concurrency, спасибо! –

+0

Я обновил свой ответ, чтобы отразить ваши выводы. – Linki

Смежные вопросы