Неинициализированная константа Delayed:: Job
Я добавил gmail файл delayed_job в свой gemfile и установил его правильно, но когда я пытаюсь запустить следующую строку:
Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc
Я получаю ошибку 'uninitialized constant Delayed:: Job'
Может кто-нибудь объяснить, что мне нужно сделать здесь? Я попытался запустить "rake jobs: work" заранее, но он также возвращает ошибку "uninitialized constant Delayed:: Job". Кроме того, я добавил "require" delayed_job '"в файл (application.rb) без большой удачи.
Ответы
Ответ 1
Вы выполнили инструкции по установке в файле 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, запустить этот код выше, чтобы создать таблицу и перенести базу данных, а затем перезагрузить сервер и перейти!
Ответ 2
Если вы обновили версию delayed_job >= 3, вам нужно добавить это (предположим, что вы используете ActiveRecord):
# Gemfile
gem 'delayed_job_active_record'
Ответ 3
Я использую задержанную работу внутри движка (так что камень указан в .gemspec, а не в Gemfile) и получает ту же ошибку. Я обнаружил, что могу решить проблему, используя:
require 'delayed_job_active_record' # fixes problem
а не
require 'delayed_job' # doesn't
Ответ 4
На всякий случай, если это еще не ответило, проверьте приведенную ниже ссылку
http://www.pipetodevnull.com/past/2010/4/14/uninitialized_constant_delayedjob/
изменить: Альтернативный, просто обновить до последней версии - 2.1
Ответ 5
Я снова сопротивлялся той же проблемой. Я следил за 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
Ответ 6
Возможность изменения версии: если вы переходите с версии 2.1.x к версии 3.x с помощью не заблокированного пучка, у вас может быть аналогичная проблема.