Trong lớp ảnh của tôi, tôi có liên kết này.Đường ray cách chạm vào đối tượng Active Record mà không cần khóa?
belongs_to :user, :touch => true
Một ngày tôi có ngoại lệ này.
A ActiveRecord::StatementInvalid occurred in photos#update:
Mysql::Error: Deadlock found when trying to get lock; try restarting transaction:
UPDATE `users` SET `updated_at` = '2011-09-20 14:17:44' WHERE `users`.`id` = 6832
production/ruby/1.8/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract_adapter.rb:207:in `log'
Tôi nên làm gì để ngăn chặn các ngoại lệ trong tương lai như điều này xảy ra? Tôi muốn báo cáo cập nhật được hiển thị trong lỗi để không sử dụng khóa nếu có thể. Tôi không nghĩ rằng bằng cách sử dụng khóa lạc quan sẽ làm việc trong trường hợp này bởi vì khóa lạc quan có lẽ sẽ nâng cao một ActiveRecord :: StaleObjectError thay thế.
Cảm ơn câu trả lời. Đó là 2 năm sau đó và tôi không hoàn toàn chắc chắn lý do tại sao tôi đã sử dụng liên lạc. Việc vô hiệu hóa bộ nhớ cache có vẻ như là một lý do chính đáng. Bây giờ tôi sử dụng trình quét để hết hạn các mục trong bộ nhớ cache. http://guides.rubyonrails.org/caching_with_rails.html#sweepers. Tôi không dùng liên lạc ở đâu nữa. –
Tôi thích ý tưởng của valid_from, nhưng tôi nghĩ rằng bạn cần phải thêm tên lớp vào cache_key là tốt, ví dụ như [class]/[id] - [timestamp] theo http://signalvnoise.com/posts/3113- các công cụ hết hạn dựa trên khóa-bộ nhớ cache – iheggie