Tôi sẽ suy đoán rằng vì tôi đang chạy nhiều ứng dụng trong môi trường phát triển của mình, bao gồm phiên bản Rails 3.1/Spree 0.70 của cùng một ứng dụng và tôi truy cập tất cả chúng thông qua localhost, trong một số loại cookie, trong đó phiên bản 3.1 đặt một số cookie mà phiên bản 3.0.9 không thể ăn được. Có thể bạn phải làm gì với những gì @Fjan đề cập trong bài đăng của mình tại đây (https://github.com/rails/rails/issues/2509):
I traced this error and it happens because the FlashHash class in the session has been changed to no longer inherit from the Hash class in rails 3.1.
Tôi đã chạy thử nghiệm. Miễn là tôi đã làm không phải đăng nhập trên một trong hai phiên bản của ứng dụng, tôi có thể bắt đầu một và tắt nó xuống và bắt đầu khác và không chạy vào vấn đề này trên một trong hai. Tuy nhiên, khi tôi đăng nhập vào phiên bản 3.0.9 và sau đó tắt máy chủ đó và khởi chạy phiên bản 3.1, tôi đã nhận được lỗi tương tự một lần nữa. Đây là một phần dấu vết:
activesupport (3.1.1) lib/active_support/message_verifier.rb:34:in load' activesupport (3.1.1) lib/active_support/message_verifier.rb:34:in
verify' actionpack (3.1.1) lib/action_dispatch/middleware/cookies.rb:280:in []' actionpack (3.1.1) lib/action_dispatch/middleware/session/cookie_store.rb:53:in
block in unpacked_cookie_data' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:55:in stale_session_check!' actionpack (3.1.1) lib/action_dispatch/middleware/session/cookie_store.rb:51:in
unpacked_cookie_data' rack (1.3.6) lib/rack/session/cookie.rb:96:in extract_session_id' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:51:in
block in extract_session_id' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:55:in stale_session_check!' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:51:in
extract_session_id' rack (1.3.6) lib/rack/session/abstract/id.rb:43:in load_session_id!' rack (1.3.6) lib/rack/session/abstract/id.rb:32:in
[]' rack (1.3.6) lib/rack/session/abstract/id.rb:252:in current_session_id' rack (1.3.6) lib/rack/session/abstract/id.rb:258:in
session_exists?' rack (1.3.6) lib/rack/session/abstract/id.rb:104:in exists?' rack (1.3.6) lib/rack/session/abstract/id.rb:114:in
load_for_read!' rack (1.3.6) lib/rack/session/abstract/id.rb:64:in has_key?' actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:260:in
ensure in call' actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:261:in call' rack (1.3.6) lib/rack/session/abstract/id.rb:195:in
context' rack (1.3.6) lib/rack/session/abstract/id.rb:190:in `call'
Điều ngược lại cũng đúng. Khi tôi đăng nhập vào phiên bản 3.1 và sau đó tắt máy chủ đó và khởi chạy phiên bản 3.0.9, tôi đã nhận được lỗi tương tự. Dưới đây là một phần dấu vết:
activesupport (3.0.9) lib/active_support/message_verifier.rb:34:in load' activesupport (3.0.9) lib/active_support/message_verifier.rb:34:in
verify' actionpack (3.0.9) lib/action_dispatch/middleware/cookies.rb:253:in []' actionpack (3.0.9) lib/action_dispatch/middleware/session/cookie_store.rb:68:in
block in unpacked_cookie_data' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:223:in stale_session_check!' actionpack (3.0.9) lib/action_dispatch/middleware/session/cookie_store.rb:66:in
unpacked_cookie_data' actionpack (3.0.9) lib/action_dispatch/middleware/session/cookie_store.rb:57:in extract_session_id' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:39:in
load_session_id!' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:27:in []' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:210:in
current_session_id' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:239:in exists?' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:96:in
exists?' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:113:in load_for_read!' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:53:in
[]' actionpack (3.0.9) lib/action_dispatch/middleware/flash.rb:178:in call' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:149:in
call'
Điều đáng chú ý là bạn không thực sự đang trong quá trình nâng cấp. Để tái tạo vấn đề này, bạn chỉ cần chạy hai ứng dụng mở rộng hai phiên bản Rails này đang đặt cookie có cùng tên ... có lẽ là theo thứ tự (như trong thử nghiệm của tôi) hoặc đồng thời (mà tôi chưa thử).
Hy vọng rằng, một người nào khác ở đây sẽ cung cấp câu trả lời sáng suốt hơn điều này để thêm chi tiết giải thích lỏng lẻo này thiếu. Trong thời gian chờ đợi, nếu bạn đang gặp vấn đề này trong phát triển và bạn không quan tâm đến hoạt động bên trong, chỉ cần xóa cookie của bạn (như đề xuất bởi @tscolari trong chuỗi được tham chiếu ở trên: https://github.com/rails/rails/issues/2509) và di chuyển. Chúc mừng.
Nguồn
2012-02-04 18:06:32
về cơ bản điều này chỉ xảy ra trong phát triển? tôi không nghĩ vậy. Tôi không chạy hai ứng dụng cùng một lúc. –
Nó không phải là quá nhiều mà vấn đề là duy nhất cho một môi trường phát triển, nó chỉ là nó có nhiều khả năng được gặp phải ở đó. Bạn rất có thể sẽ gặp sự cố này trong môi trường sản xuất nếu bạn đang trong quá trình nâng cấp. Bối cảnh của bạn là gì. –
Chúng tôi xây dựng một viên ngọc để dễ dàng di chuyển flash giữa các phiên bản đường ray khác nhau: https://github.com/envato/rails_4_session_flash_backport – sj26