簡體   English   中英

Delayed_job:在任何調用上未定義的方法錯誤

[英]Delayed_job: Undefined method error on any call

我有一個rails 3.0.5應用程序,它與delayed_job 2.1.4一起正常工作。

自從接觸該應用程序已經過了幾周,但我只是對其進行了調整,並注意到delay_job已損壞。 具體來說,任何對delay_job的調用在延遲后都會在該方法上返回“未定義的方法”錯誤。 (例如,StudentMailer.delay.student_mail('test')在“ student_mail”上返回“未定義的方法”)我不知道為什么。 一些東西:

  • 用StudentMailer.student_mail('test')。deliver替換StudentMailer.delay.student_mail('test')。deliver可以很好地發送郵件。

  • 尚未更改網站上的任何gem版本,自開發以來已被鎖定

  • RVM已卸載並重新安裝

  • 發生在所有郵件方法中

下面的代碼和錯誤:

郵件:

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

模型(郵件程序在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   }

配置/引導

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 {undefined method 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:in invoke_job'\\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:120:in在運行'\\ n / Users / john / .rvm的塊中(2級) /rubies/ruby-1.9.2-p290/lib/ruby/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運行時timeout'\\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:120:in塊'\\ n / Users / john / .rvm / rubies / ruby​​-1.9.2-p290 / lib / ruby​​ / 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運行中\\ n / Users / john / .rvm / gems / ruby​​-1.9.2-p290 / gems / delayed_job-2.1.4 / lib / delayed / 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'\\ n / Users / j 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阻止 ohn / .rvm / gems / ruby​​-1.9.2-p290 / gems / delayed_job-2.1.4 / lib / delayed / worker.rb:103:in 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'\\ n / Users / john / .rvm / gems / ruby​​-1.9.2-p290 / gems / delayed_job中-2.1.4 / lib / delayed / 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實時'\\ n / Users / john / .rvm / gems / ruby​​-1.9.2-p290 / gems / delayed_job-2.1.4 / lib / delayed / worker.rb:77:in 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 loop'\\ n / Users / john / .rvm / gems / ruby​​-1.9.2-p290 / gems / delayed_job-2.1.4 / lib / delayed / worker.rb:74:in start'\\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/command.rb:104:in運行'\\ n / Users / john / .rvm / gems / ruby​​-1.9.2-p290 / gems / delayed_job -2.1.4 / lib / delayed / 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通話中'\\ n / Users / john / .rvm / gems / ruby​​-1.9.2-p290 / gems / daemons-1.1.4 / lib / daemons / 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通話'\\ n / Users / john / .rvm / gems / ruby​​-1.9.2 -p290 / gems / daemons-1.1.4 / lib / daemons / 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'\\ n / Users / john / .rvm / gems / ruby​​-1.9.2-p290 / gems / daemons-1.1.4 / lib / daemons / 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運行'\\ n /用戶/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/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通話'\\ n / Users / john / .rvm / gems / ruby​​-1.9.2-p290 / gems /daemons-1.1.4/lib/daemons/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中 '\\ n / Users / john / .rvm / gems / ruby​​-1.9.2-p290 / gems / delayed_job-2.1.4 / lib / delayed / command.rb:81:in run_process'\\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/command.rb:75:in in daemonize'\\ n / Users / john / .rvm / gems / ruby​​-1.9 .2-p290 / gems / delayed_job-2.1.4 / lib / delayed / command.rb:73:in times'\\n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/command.rb:73:in守護進程'\\ 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 |

我在谷歌搜索同一問題,並且找到了解決辦法(對我有用)。

將這兩行添加到config / application.rb的開頭

需要“ yaml”

YAML :: ENGINE.yamler ='syck'

然后,重新啟動服務器(webrick / thin / whatever)和delayed_job(bundle exec ./script/delayed_job重新啟動)

完成。

我有同樣的問題。 如果您使用的是Thin,請嘗試執行“捆綁exec Thin Start”。 它為我工作。

嘗試更改方法定義

 def self.course_signup 

要么

 studentmailer = StudentMailer.new

因為現在您從類中調用方法,但是方法屬於對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM