2011-07-10 2 views
16

Я добавил delayed_job камень в мой Gemfile и установлен правильно, но когда я пытаюсь запустить следующую строку:неинициализированным постоянная Задержка :: Работа

Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 

Я получаю ошибку «неинициализированным постоянной задержкой :: Работа '

Может ли кто-нибудь объяснить, что мне нужно сделать здесь? Я попытался запустить «rake jobs: work» заранее, но он также возвращает ошибку «uninitialized constant Delayed :: Job». Кроме того, я добавил "require" delayed_job '"в файл (application.rb) без большой удачи.

ответ

12

Вы выполнили инструкции по установке в файле README? https://github.com/collectiveidea/delayed_job

Добавьте это в Gemfile:

gem 'delayed_job_active_record' 

, а затем запустить это в консоли:

$ rails generate delayed_job:active_record 
$ rake db:migrate 

Вам нужно создать таблицу замедленное рабочих мест в базе данных (это предполагает, что вы используя активную запись).

Для Rails 3 все, что вам нужно сделать, это включить его в gemfile, запустить этот код выше, чтобы создать таблицу и перенести базу данных, а затем перезагрузить сервер и перейти!

+1

Также убедитесь, что вы добавляете 'приложение/модели/delayed_job.rb', а также. Не нужно много определять, просто сам класс: 'class DelayedJob sorens

+0

@sorens вы можете подтвердить, что это необходимый шаг? –

+0

@just__matt Я так считаю, но я не подтвердил это. Запустите новый проект рельсов, добавьте драгоценный камень delayed_job, пропустите модель и посмотрите. – sorens

1

Я с трудом возвращался с той же проблемой. Я следил за ryan bates screencast на delayed_job и получил ту же ошибку «uninitialized constant Delayed :: Job». В screencast ryan создается файл с именем mailing_job.rb (расположенный под папкой lib) с методом delayed_job внутри, что позволяет использовать метод enqueue. После выполнения некоторых исследований я обнаружил, что рельсы 3 не будет автоматически загружать Lib файлы папки в приложение (не совсем уверен)

Попробуйте
В контроллере, где вы используете этот:.

"Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc" 

Попробуйте потребовать файл, подобный этому.

require 'mailing_job' 
class AssetsController < ApplicationController 
    def some_method 
     Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 
    end 
end 
2

Только в том случае, если это по-прежнему без ответа, проверьте ссылку ниже

http://www.pipetodevnull.com/past/2010/4/14/uninitialized_constant_delayedjob/

редактировать: Альтернатива, просто обновить до последней версии - 2,1

+1

Это решило мою проблему, но ссылка имеет 1 строку кода, вы могли бы легко вставить ее здесь. – lfzawacki

+0

Delayed :: Worker.backend =: active_record – ReggieB

18

Если у вас 've updated до delayed_job version> = 3 вам нужно будет добавить это (предположим, что вы используете ActiveRecord):

# Gemfile 
gem 'delayed_job_active_record' 
+1

Очень полезно - у меня была эта проблема. Завершите в сторону, но чтобы сохранить кого-то другого, я также должен был обновить использование моего Paperclip от 'gem 'aws-s3'' до' gem' aws-sdk'' –

+2

См. «Обновление с 2.x до 3.0.0 на Active Record »здесь: https://github.com/collectiveidea/delayed_job – Cam

+0

Это фиксировало мою проблему, переходящую к кедровому стекю на Heroku вместе с комментарием Питера об aws. Благодаря! – jbg

0

Возможность изменения версии: если вы переходите от версии 2.1.x к версии 3.x драгоценного камня через неблокируемый пучок, у вас может быть аналогичная проблема.

7

Я использую задержанную работу в двигателе (так что драгоценный камень указан в .gemspec, а не в Gemfile) и получает ту же ошибку.Я обнаружил, что я мог бы решить эту проблему с помощью:

require 'delayed_job_active_record' # fixes problem 

, а не

require 'delayed_job'    # doesn't 
+0

Этот ответ был сделан уже дважды по этому вопросу. –

+2

Нет, нет. Ключевым моментом является то, что в двигателе мне пришлось специально использовать инструкцию require. Другие ответы относятся к стандартным приложениям rails, где достаточно использовать «gem» delayed_job_active_record »в Gemfile. Это не относится к движку, в котором драгоценный камень определяется в gemspec, и тогда вам нужно использовать инструкцию require, в которой камень необходим в вашем коде. – ReggieB

+0

Да, это требует утверждения! Спасибо. –

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