Rails でクラス変数 @@ の使用を避けるべきなのはなぜですか? これにはセキュリティ上の抜け穴がありますか。 Rails は初心者なので回答をお願いします。 インスタンス変数をよく使用しています@variable_name
。 一度試しました@@variable_name
。
クラス変数について私が知っているのは、クラス変数はオブジェクト間で共有可能
でも本当に知りたいのはRails でクラス変数 @@ の使用を避けるべきなのはなぜですか?
ベストアンサー1
スレッドセーフではないからです。多くの rails 対応サーバーはマルチスレッドです。つまり、アプリケーションのインスタンスが常に複数実行されていて、ユーザーのリクエストがそれらのインスタンスの 1 つに任意に割り当てられることになります。クラス変数はプロセス間で共有されないため、後続のリクエストではクラス変数が異なる可能性があります。
意図的にシングルスレッド サーバーでアプリを実行できたとしても、リクエスト間でアプリが再起動され、クラス変数が失われないという保証はありません。
クラス変数が提供する機能と同様の機能が必要な場合は、Memcached や Redis などのキー値ストアを検討することを強くお勧めします。