ActiveRecord::Base.transaction do
userapply.lock!
sleep(1.minutes)
end
, затем, если я выполню это в другом процессе,
Userapply.all.update_all({priority:1, updated_at: Time.now})
истечет время ожидания или ждет отключения предыдущей блокировки. Первый вопрос:
1) можно ли остановить активный запрос, если он занимает определенное время (это уже указано в файле database.yml, но теперь я уверен, как вручную изменить значение в Speci c код)
2) Кажется, Timeout :: timeout (period) не останавливает активный запрос, если я поставил код таким образом.
require 'timeout'
timeout_in_seconds = 2
begin
Timeout::timeout(timeout_in_seconds) do
#Do something that takes long time
Userapply.all.update_all({priority:1, updated_at: Time.now})
end
rescue Timeout::Error
end
Есть что-то, что я пропускаю здесь?
3) Как мы можем узнать, какая запись заставляет код ждать, пока все связанные записи не будут выпущены? Например, если я запрашиваю Userapply.all.update_all, то есть некоторые записи, которые были заблокированы в других запросах, и я хочу знать, какие идентификаторы в настоящее время поддерживаются.
Сердечно прошу помощи здесь (: (: (: