Я планирую задание, чтобы запустить, скажем, 10 минут. Как правильно отменить эту конкретную работу без использования каких-либо грязных дополнительных полей в модели и т. Д. Есть ли какой-либо вызов для удаления определенного задания или заданий, связанных с конкретной моделью, экземпляром и т. Д.?Как отменить запланированную работу с delayed_job в Rails?
ответ
отказа от ответственности: Я не эксперт пользователя delayed_job ...
«? Есть ли вызов для удаления конкретной работы или работы, связанные с конкретной моделью, например, и т.д.»
Задержка :: Работа - это только объект ActiveRecord, чтобы вы могли найти и уничтожить любую из этих записей. В зависимости от вашего варианта использования это можно обрабатывать по-разному. Если кто-то собирается их вручную уничтожить, это может быть обработано через интерфейс администратора в вашем веб-приложении.
# list all jobs
Delayed::Job.all
# find a job by id
job = Delayed::Job.find(params[:id])
# delete it
job.delete
если вам нужны некоторые из процесса задания Удаление заданий по «типу задания» вы могли бы цикл через каждый из них и удалить его, если он соответствует вашей работы; попробуйте это в сценарий/консоли
class MyJob < Struct.new(:some_value);
def perform
# ...
end
end
my_job = MyJob.new('xyz')
job = Delayed::Job.enqueue(my_job, 0, 1.hour.from_now)
job.name
# => "MyJob"
job.handler
# => "--- !ruby/struct:MyJob \nsome_value: xyz\n"
так дано выше, если вы хотите, чтобы удалить все задания типа MyJob
Delayed::Job.all.each do |job|
if job.name == "MyJob" then
job.delete
end
end
это может или не может помочь в вашей ситуации? во многих случаях вы можете удалить MyJob, но только там, где атрибут: some_value был «abc», а не «xyz». В этом случае вам может потребоваться реализовать «display_name» на вашем объекте MyJob. job.name будет использовать это, если оно существует
class MyJob < Struct.new(:user_id);
def perform
# ...
end
def display_name
return "MyJob-User-#{user_id}"
end
end
# store reference to a User
my_job = MyJob.new(User.first.id) # users.id is 1
job = Delayed::Job.enqueue(my_job, 0, 1.hour.from_now)
job.name
# => "MyJob-User-1"
job.handler
# => "--- !ruby/struct:MyJob \nuser_id: 1\n"
Таким образом, вы можете быть более избирательным, какие записи удалить?
надеюсь, это даст вам достаточно информации о возможных способах его решения?
delayed_job 3 добавил атрибут queue
. Это можно угнать, чтобы запланировать отмену задания.
class MyJob < Struct.new(:user_id)
def self.queue_name
"something-unique"
end
def perform
# ...
end
end
#scheduler
my_job = MyJob.new(User.first.id)
#'cancel' pending jobs first
Delayed::Job.where(queue: my_job.class.queue_name).destroy_all
#queue it up
Delayed::Job.enqueue(my_job,
queue: my_job.class.queue_name,
run_at: 1.hour.from_now
)
Я бы действительно не рекомендовал делать так. «Режиссер» предназначен для масштабирования приложения. Вы уже прошли через пользовательский Struct, просто выберите другое имя атрибута house9. – Dex
- 1. Активная работа - Как отменить запланированную работу Mailer?
- 2. Как отменить повторную работу, запланированную с помощью RACScheduler?
- 3. Как отменить уже запланированную TimerTask?
- 4. Как создать «одиночную» запланированную работу в oracle?
- 5. Как бросить запланированную работу в оракула
- 6. Как запустить запланированную работу в java spring?
- 7. Вручную повторить работу в Delayed_job
- 8. Rails 2 Delayed_job gem
- 9. Как отменить работу с tar?
- 10. Как именно отменить работу?
- 11. Ruby on Rails, delayed_job
- 12. Как отменить работу в редакторах
- 13. Rails + Devise + delayed_job?
- 14. Rails 3 - Delayed_Job
- 15. Delayed_job in rails failing
- 16. Как я могу отменить запланированную почту в sendgrid?
- 17. Rails delayed_job не выполняет
- 18. Rails/delayed_job просто ... не работает
- 19. Как отменить другую работу Дженкинса?
- 20. Как немедленно отменить работу BackgroundWorker?
- 21. Кварц, как планировать онлайн-действие как запланированную работу?
- 22. Resque - как отменить текущую работу?
- 23. Delayed_job в rails raise 'nil object' error
- 24. Как отменить работу, созданную с помощью addOperationWithBlock?
- 25. Rails 3 - Delayed_job 4.x
- 26. Создайте запланированную работу при запуске с помощью экспресс
- 27. Rails: delayed_job почта не отправляется
- 28. Перезапуск delayed_job с Capistrano
- 29. Rails delayed_job ошибка аргумента с почтовым сообщением
- 30. Как отменить работу в PHP-спасательное
Идеальное решение! – mdrozdziel
Возможно, вы должны использовать «destroy» вместо «delete». –
Мертвые удобны, спасибо за действительно подробный ответ. + –