[英]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 methodcourse_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:ininvoke_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 / jreserve_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:intimes'\\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:inblock 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:instart'\\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:inrun_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:intimes'\\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.