0

Я пытался понять это в течение длительного времени и не могу понять это.Написание заданий 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 

ответ

1

Можем ли мы просто course.destroy как последняя строка метода CourseJob#perform?

+0

Благодарим за отзыв. Я пошел дальше и разъяснил свой вопрос выше. Это действительно хорошая идея, но, к сожалению, я не могу заставить процесс работать вообще с помощью специального задания (хотя раньше он работал с помощью метода обычной задержки). Пока я не смогу это понять, я не могу заставить запись уничтожить. – CodeBiker

+0

Могу ли я узнать, как вы тестировали, что он не работает с пользовательским объектом Job? Потому что, по моему мнению, ваша проблема очень странная ... –

Смежные вопросы