3

Rails 3 アプリで解決しようとしている特定の問題があり、私が目にしている 2 つの一般的な解決策は次のとおりです。

Thread.current[:something] = value

class Foo
  cattr_accessor :bar
end

Foo.bar = value

これらのデータ ストレージ (および対応する取得) の方法は、複数のユーザーが同時に Rails アプリに要求を行っても安全ですか?

Web サーバーは単一のスレッドを使用して複数のリクエストを処理できるため、Thread.current が心配ですよね? または、Thread.current を使用する際の問題を防ぐために、レールがスレッドを処理する方法に何かありますか? Acts As Currentは Thread.current を使用して現在のユーザーを保存しているので、希望が持てます... しかし、信頼できる確認が必要です。

パフォーマンス上の理由から、Rails がクラス オブジェクトをメモリにキャッシュすることを期待しているため、実稼働環境でのクラス レベルの属性についても懸念しています。クラス レベルの属性はリクエスト間で再利用されますか? または、レールがリクエスト全体でクラス属性を処理するために行うことのために安全ですか? 繰り返しますが、これについて正式な確認をお願いします。

... このアプリは Ruby 1.9.2@p180 と Rails 3.0.9 を使用しています

4

1 に答える 1

1

現在のリクエストのタイムゾーンを保存するのに十分な安全性:

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/time/zones.rb

于 2011-07-12T03:39:31.747 に答える