Я пытался понять это в течение длительного времени и не могу понять это.Написание заданий DelayedJob для запуска скрипта, а затем уничтожения объекта
Я использую DelayedJob в своем приложении Rails для запуска скрипта для заполнения некоторых форм на веб-сайте с помощью скрипта Mechanize. Однако после завершения работы я не хочу, чтобы какая-либо запись записи сохранялась в любой базе данных в моем приложении, так как нет причин, по которой кто-либо должен получить к ней доступ снова.
Этот процесс работает отлично, когда я запускал его как простой фоновый метод в методе create
контроллера, то есть путем вызова @course.delay.scrape
сразу после if @course.save
. Но теперь, когда я хочу уничтожить объект сразу после завершения фоновой работы, я считаю, что мне нужно создать собственное задание, и я борюсь с этим.
Я знаю, что в документации DelayedJob указан метод def after(job)
. Чтобы использовать этот метод, мне нужно создать собственное задание. Я смущен тем, как создать собственное задание, так как почти каждый пример, который я могу найти, это отправка массовых писем, тогда как это для другой цели. Я не знаю, как заставить скрипт работать таким образом.
Если вы можете помочь мне с исправлением этого кода вообще, это было бы очень признательно! Я пробовал много вариантов, рассматривая как можно больше примеров. Я знаю, что у него есть хотя бы несколько ошибок, но я недостаточно продвинутый, чтобы знать, что менять. Это последнее, что я пробовал, прежде чем бросать полотенце.
Вот моя модель (в моделях/course.rb):
class Course < ActiveRecord::Base
after_create :send_to_delayed_job
def scrape
...Mechanize script goes here ....
end
def send_to_delayed_job
Delayed::Job.enqueue CourseJob.new(self.id), :queue => 'mycoursequeue'
end
end
Вот моя работа (в моделях/course_job.rb):
class CourseJob < Struct.new(:course_id)
def perform
course = Course.find(self.id)
course.scrape
end
def after(job)
Course.destroy(params[:id])
end
end
Благодарим за отзыв. Я пошел дальше и разъяснил свой вопрос выше. Это действительно хорошая идея, но, к сожалению, я не могу заставить процесс работать вообще с помощью специального задания (хотя раньше он работал с помощью метода обычной задержки). Пока я не смогу это понять, я не могу заставить запись уничтожить. – CodeBiker
Могу ли я узнать, как вы тестировали, что он не работает с пользовательским объектом Job? Потому что, по моему мнению, ваша проблема очень странная ... –