Использование delayed_job правильно
Чтобы ответить на ваш вопрос косвенно, это выглядит, как вы не используете delayed_job права. Я объясню, что делает ваш код, и предлагайте то, что вы, вероятно, пытаетесь сделать.
Listing.delay.all
Метод следующие delay
(в данном случае, all
) будут выполнены в фоновом режиме. Вместо возврата массива списков он вернет объект Delayed :: Backend :: ActiveRecord :: Job. Это не то, что происходит в вашем случае, но я доберусь до этого.
Любое задание, которое должно быть у вас на заднем плане, должно быть side effect, так как возвращаемое значение отложенных заданий не сохраняется. Обычно побочным эффектом является хранение чего-то в базе данных, создание файла или что-то еще, что можно обнаружить и использовать позже. Просмотрев таблицу заданий delayed_job, вы можете увидеть, что возвращаемое значение не сохраняется.
> Delayed::Backend::ActiveRecord::Job.column_names
=> ["id", "priority", "attempts", "handler", "last_error", "run_at", "locked_at", "failed_at", "locked_by", "queue", "created_at", "updated_at"]
Тем не менее, Listing.all
и все другие методы, область применения не имеют каких-либо побочных эффектов; они просматривают только облаченные списки и возвращают их. При использовании delayed_job обязательно используйте его только для методов, которые имеют побочные эффекты, такие как обновление базы данных и т. Д.
К сожалению, не зная, чего вы пытаетесь достичь, трудно дать совет о том, как использовать delayed_job в вашем сценарии или даже если это правильный инструмент для работы.
Ваше сообщение об ошибке - уровень стека слишком глубоко
Во-первых, скажу, что получить уровень стека слишком глубоко ошибки на Listing.delay.all
не является нормальным. Я смог использовать его в модели ActiveRecord User
в моем приложении Rails 3 с delayed_job 3.0.2, и он отлично работал. (Это ничего путного не делает, но он вернулся в работу вместо того, чтобы бросать ошибку вы получили.)
> User.delay.all
=> #<Delayed::Backend::ActiveRecord::Job id: 1, priority: 0, attempts: 0, handler: "--- !ruby/object:Delayed::PerformableMethod\nobject:...", last_error: nil, run_at: "2012-05-02 02:10:39", locked_at: nil, failed_at: nil, locked_by: nil, queue: nil, created_at: "2012-05-02 02:10:39", updated_at: "2012-05-02 02:10:39">
Опять же, существует не так много каждый может сделать, чтобы помочь вам понять, что ошибка без дополнительной информации. Я рекомендую начать с выяснения, является ли delayed_job действительно подходящим инструментом для того, что вы делаете (это не если вы используете его для передачи данных в представление), используйте его правильно, а затем посмотрите, все ли вы проблема.
какая версия отложенной работы вы используете? была ошибка в 3.0.0 с задержкой вызова методов класса –
Привет, Я использую delayed_job 3.0.2 – AdamNYC
Почему вы выполняете операцию массового чтения в режиме «отложен»? –