私の写真のクラスで私はこの関連があります。ロックなしで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のアイデアが気に入っていますが、私はあなたがhttp://signalvnoise.com/posts/3113-にあるように[class]/[id] - [timestamp]のように、クラス名をcache_keyにも追加する必要があると思います。キーベースのキャッシュ有効期限 - 動作 – iheggie