Delayed_job: неопределенная ошибка метода при любом вызове - PullRequest
5 голосов
/ 06 сентября 2011

У меня есть приложение rails 3.0.5, которое отлично работало с delayed_job 2.1.4.

Прошло несколько недель с тех пор, как я прикоснулся к приложению, но я просто пошел, чтобы настроить его и заметил, что delayed_job не работает. В частности, любой вызов delayed_job возвращает ошибку «неопределенный метод» в методе после задержки. (например, StudentMailer.delay.student_mail ('test') возвращает "неопределенный метод" для "student_mail") Я не могу понять, почему. Несколько вещей:

  • Замена StudentMailer.delay.student_mail ('test') на StudentMailer.student_mail ('test'). Доставить доставляет почту очень хорошо.

  • На сайте не были изменены версии гемов, они были заблокированы с момента разработки

  • RVM был удален и переустановлен

  • Происходит во всех методах рассылки

Код и ошибка ниже:

MAILER:

class StudentMailer < ActionMailer::Base
  def course_signup(email, password, course, enrolment)
    @email = email
    @password = password
    @course = course
    @enrolment = enrolment
    @student = Student.where(:email => email).first
    if (@student.user.first_name && @enrolment.student.user.last_name) then
      @username = @student.first_name.gsub(/[^[:alnum:]]/, '').downcase + '.' + @student.last_name.gsub(/[^[:alnum:]]/, '').downcase
    else
      @username = "fcuser#{@student.id}"
    end
    mail(:to => email, :from => ENV['ACCOUNTS_EMAIL'], :subject => "You have been enrolled as a student for #{course}", :content_type => 'text/plain') 
  end
end

MODEL (Mailer вызывается after_save)

  after_create {
    studentmailer = StudentMailer
    #studentmailer.course_signup(self.student.email, self.purchase.course).deliver
    randompass = RandomPassword.random_string(20)
    randomGatewayPass = RandomPassword.random_string(8)
    studentmailer.delay.course_signup(self.student.email, randomGatewayPass, self.purchase.course, self)
    self.save   }

CONFIG / BOOT.RB

require 'yaml'
YAML::ENGINE.yamler = 'syck'

require 'rubygems'
gemfile = File.expand_path('../../Gemfile', __FILE__)
begin
  ENV['BUNDLE_GEMFILE'] = gemfile
  require 'bundler'
  Bundler.setup
rescue Bundler::GemNotFound => e
  STDERR.puts e.message
  STDERR.puts "Try running `bundle install`."
  exit!
end if File.exist?(gemfile)

ЗАДЕРЖКА ОШИБКИ ЗАДАНИЯ:

{неопределенный метод course_signup' for #<Class:0x007fbcf61850c8> /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/performable_mailer.rb:6:in выполнить '\ n / Users / john / .rvm / gems / ruby-1.9.2-p290 / gems / delayed_job-2.1.4 / lib / delayed / backend / base.rb: 87 :в invoke_job'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:120:in блок (2 уровня) в бег '\ п / Users / джон / .rvm / рубины / рубиново-1.9.2-P290 / Библиотека / рубин / 1.9.1 / timeout.rb: 58: в timeout'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:120:in блок в бег '\ п / Users / джон / .rvm / рубины / рубиново-1.9.2-P290 / Библиотека / рубин / 1.9.1 / benchmark.rb: 310: в realtime'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:119:in пробег '\ п / Users / джон / .rvm / драгоценные камни / рубиново-1.9.2-P290 / драгоценные камни / delayed_job-2.1.4 / Библиотека / замедленная / worker.rb: 177: в reserve_and_run_one_job'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:104:in блок в work_off '\ п / Users / джон / .rvm / драгоценные камни / рубиново-1.9.2-P290 / драгоценные камни / delayed_job-2.1.4 / Библиотека / замедленная / worker.rb: 103: в times'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:103:in work_off '\ п / Users / джон / .rvm / драгоценные камни / рубиново-1.9.2-P290 / драгоценные камни / delayed_job-2.1.4 / Библиотека / замедленная / worker.rb: 78: в block (2 levels) in start'\n/Users/john/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/benchmark.rb:310:in в режиме реального времени '\ п / Users / джон / .rvm / драгоценные камни / рубиново-1.9.2-P290 / драгоценные камни / delayed_job-2.1.4 / Библиотека / замедленная / worker.rb: 77: в block in start'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:74:in петля '\ п / Users / джон / .rvm / драгоценные камни / рубиново-1.9.2-P290 / драгоценные камни / delayed_job-2.1.4 / Библиотека / замедленная / worker.rb: 74: в start'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/command.rb:104:in пробег '\ п / Users / джон / .rvm / драгоценные камни / рубиново-1.9.2-P290 / драгоценные камни / delayed_job-2.1.4 / Библиотека / замедленная / command.rb: 83: в block in run_process'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons/application.rb:249:in называют '\ п / Users / джон / .rvm / драгоценные камни / рубин-1.9.2-P290 / драгоценные камни / Демоны-1.1.4 / Библиотека / Демоны / application.rb: 249: в block in start_proc'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons/daemonize.rb:197:in называют '\ п / Users / джон / .rvm / драгоценные камни / рубин-1.9.2-P290 / драгоценные камни / Демоны-1.1.4 / Библиотека / Демоны / daemonize.rb: 197: в call_as_daemon'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons/application.rb:253:in start_proc '\ п / Users / джон / .rvm / драгоценные камни / рубин-1.9.2-P290 / драгоценные камни / Демоны-1.1.4 / Библиотека / Демоны / application.rb: 293: в start'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons/controller.rb:70:in пробег '\ п / Users / джон / .rvm / драгоценные камни / рубин-1.9.2-P290 / драгоценные камни / Демоны-1.1.4 / Библиотека / daemons.rb: 195: в block in run_proc'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons/cmdline.rb:109:in называют '\ п / Users / джон / .rvm / драгоценные камни / рубин-1.9.2-P290 / драгоценные камни / Демоны-1.1.4 / Библиотека / Демоны / cmdline.rb: 109: в catch_exceptions'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons.rb:194:in run_proc '\ п / Users / джон / .rvm / драгоценные камни / рубиново-1.9.2-P290 / драгоценные камни / delayed_job-2.1.4 / Библиотека / замедленная / command.rb: 81: в run_process'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/command.rb:75:in блок в демоном '\ п / Users / джон / .rvm / драгоценные камни / рубиново-1.9.2-P290 / драгоценные камни / delayed_job-2.1.4 / Библиотека / замедленная / command.rb: 73: в times'\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/command.rb:73:in daemonize '\ nscript / delayed_job: 5: in `' | 2011-09-06 07:42:21 | NULL | 2011-09-06 07:43:00 | NULL | 2011-09-06 07:40:07 | 2011-09-06 07:43:00 |

Ответы [ 3 ]

5 голосов
/ 03 декабря 2012

Я гуглил ту же самую проблему, и я нашел исправление для этого (у меня это сработало).

добавьте эти две строки в заголовок вашего config / application.rb

требуется 'yaml'

YAML :: ENGINE.yamler = 'syck'

затем перезагрузите сервер (webrick / thin / what) и delayed_job (bundle exec ./script/delayed_job restart)

сделано.

1 голос
/ 15 сентября 2011

У меня была такая же проблема.Если вы используете thin, попробуйте выполнить команду "bundle exec thin start".У меня это сработало.

0 голосов
/ 06 сентября 2011

попробуйте изменить определение метода

 def self.course_signup 

или

 studentmailer = StudentMailer.new

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

...