2012-02-22 54 views
20

Tại sao chúng ta nên tránh sử dụng các biến lớp @@ trong đường ray? Có lỗ hổng bảo mật nào không. Hãy trả lời như tôi mới với đường ray. và tôi sử dụng nhiều biến mẫu @variable_name. Tôi đã thử một lần @@variable_name.Tại sao chúng ta nên tránh sử dụng các biến lớp @@ trong đường ray?

Tôi chỉ biết về biến lớp, biến Class là thể chia sẻ giữa đối tượng

Nhưng tôi thực sự muốn biết Tại sao chúng ta nên tránh sử dụng các biến lớp @@ trong đường ray?

+0

Điều đó nghe như các biến 'tĩnh' trong Java. Không có lý do gì để không sử dụng nó, chỉ cần lưu ý rằng nó không thuộc về cá thể của bạn và có thể thay đổi không đồng bộ. – Chloe

Trả lời

41

Đơn giản chỉ vì chúng không phải là chủ đề an toàn. Nhiều rails = máy chủ có khả năng là đa luồng. Điều đó có nghĩa là có thể có nhiều phiên bản ứng dụng đang chạy của bạn vào bất kỳ thời điểm nào và bất kỳ yêu cầu nào của một trong những người dùng của bạn sẽ được gán một cách tùy ý cho một trong số chúng. Biến lớp không được chia sẻ giữa các quy trình để có khả năng biến lớp của bạn sẽ khác trong yêu cầu tiếp theo.

Thậm chí nếu bạn cố tình quản lý để chạy ứng dụng của bạn trong một máy chủ duy nhất, không có gì đảm bảo rằng ứng dụng của bạn sẽ không được khởi động lại giữa các yêu cầu, mất biến lớp của bạn.

Nếu bạn muốn chức năng tương tự như các biến lớp cung cấp, tôi khuyên bạn nên xem xét các cửa hàng có giá trị khóa như Memcached hoặc Redis.

+0

Không có gì được chia sẻ giữa các quá trình, không chỉ @@ vars. Đoán chúng ta không nên sử dụng @vars cũng vì lý do tương tự, phải không? –

+7

@Victor Vâng, '@ variables' là các biến mẫu và chúng nhất quán ** trong ** yêu cầu vì yêu cầu sinh ra một thể hiện mới của bộ điều khiển. Chỉ cần không mong đợi để tìm thấy chúng trong yêu cầu tiếp theo. – edgerunner

+0

Liệu người chăm sóc downvoter có giải thích tại sao không? – edgerunner

Các vấn đề liên quan