2013-11-17 2 views
0

Если я так хорошо понимаю, как delayed job, так что у меня есть метод, и я могу назвать его заданием с задержкой. В этом случае будет помещена эта запись относительно этой «работы» в таблицу delayed_jobs и в то же время будет автоматически запускаться демон, который будет обрабатывать одну запись другой в этой таблице.Как отслеживать отложенные задания в Rails?

Структура таблицы выглядит следующим образом:

create_table "delayed_jobs", :force => true do |t| 
    t.integer "priority", :default => 0, :null => false 
    t.integer "attempts", :default => 0, :null => false 
    t.text  "handler",     :null => false 
    t.text  "last_error" 
    t.datetime "run_at" 
    t.datetime "locked_at" 
    t.datetime "failed_at" 
    t.string "locked_by" 
    t.string "queue" 
    t.datetime "created_at",    :null => false 
    t.datetime "updated_at",    :null => false 
    end 

Теперь, вот задача, которую я хотел бы, чтобы использовать замедленные рабочие места алгоритм. Пользователи могут загружать файлы на моем сайте. Эти файлы могут быть огромными - например, 400 Мбайт, и я хочу использовать задержанную работу для этой цели.

Итак, пользователь выбирает файл, который он хочет загрузить, запись будет помещена в таблицу delayed_jobs, и теперь я хотел бы сказать этому пользователю, что его файл обработан. Но когда вы сделаете загрузку нескольких пользователей одновременно, скажем, 5, как я могу узнать, что загрузка пользователя «A» все еще продолжается? Как добавить собственный столбец в delayed_jobs и как написать там некоторую информацию?

Потому что похоже, что все, что связано с Delayed Job, работает на фоне.

Благодаря

ответ

1

Вы можете написать свой собственный Custom job, с которой вы можете хранить дополнительные данные (например, user_id). Вы также можете использовать Hooks, чтобы сделать что-то, когда задание выполнено с помощью метода success.

Например:

class FileUploadJob < Struct.new(:user_id, :filename, :file) 
    def perform 
    # upload the file 
    end 

    def success(job) 
    # notify user of success 
    end 
end 
Смежные вопросы