내 사진 수업에는이 연관성이 있습니다.잠금없이 Active Record Object를 터치하는 방법은 무엇입니까?
belongs_to :user, :touch => true
어느 날이 예외가 발생했습니다.
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'
이와 같은 예외가 발생하지 않도록하려면 어떻게해야합니까? 가능한 경우 잠금을 사용하지 않도록 오류에 표시된 업데이트 문을 원합니다. 낙관적 인 잠금은 아마 ActiveRecord :: StaleObjectError를 발생시킬 것이기 때문에 낙관적 인 잠금을 사용하는 것이이 경우에는 작동하지 않을 것이라고 생각합니다.
답변 해 주셔서 감사합니다. 2 년이 지난 지금 왜 내가 터치를 사용하는지 잘 모르겠습니다. 캐시를 무효화하는 것이 좋은 이유 인 것 같습니다. 이제 스위퍼를 사용하여 캐시 항목을 만료시킵니다. http://guides.rubyonrails.org/caching_with_rails.html#sweepers. 나는 더 이상 아무데도 터치를 사용하지 않습니다. –
나는 valid_from에 대한 아이디어가 마음에 들지만, 클래스 이름을 cache_key에도 추가 할 필요가 있다고 생각합니다. 예를 들어 [class]/[id] - [timestamp] http://signalvnoise.com/posts/3113- 키 기반의 캐시 만료 - 작동 방식 – iheggie