加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Delayed_job:任何调用都有未定义的方法错误

发布时间:2020-12-17 03:20:42 所属栏目:百科 来源:网络整理
导读:我有一个rails 3.0.5应用程序,与delayed_job 2.1.4工作正常. 我触摸应用程序已经有几周了,但我只是去调整它,发现delayed_job已经坏了.具体来说,对delayed_job的任何调用都会在延迟后返回方法上的“未定义方法”错误. (例如,StudentMailer.delay.student_mail
我有一个rails 3.0.5应用程序,与delayed_job 2.1.4工作正常.

我触摸应用程序已经有几周了,但我只是去调整它,发现delayed_job已经坏了.具体来说,对delayed_job的任何调用都会在延迟后返回方法上的“未定义方法”错误. (例如,StudentMailer.delay.student_mail(‘test’)在“student_mail”上返回“未定义的方法”)我无法弄清楚原因.一些东西:

>用StudentMailer.student_mail(‘test’)替换StudentMailer.delay.student_mail(‘test’).deliver传送邮件就好了.
>没有更改网站上的任何宝石版本,他们自开发以来一直处于锁定状态
>已卸载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(梅勒呼吁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)

延迟工作错误:

{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
perform’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
block (2 levels) in
run’n/Users/john/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/timeout.rb:58:in
timeout'n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:120:in
block in
run’n/Users/john/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/benchmark.rb:310:in
realtime'n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:119:in
run’n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/worker.rb:177:in
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
block in
work_off’n/Users/john/.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:in
block (2 levels) in
start'n/Users/john/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/benchmark.rb:310:in
realtime’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
run’n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.1.4/lib/delayed/command.rb:83:in
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
call’n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons/application.rb:249:in
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
call’n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons/daemonize.rb:197:in
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:in
start'n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons/controller.rb:70:in
run’n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons.rb:195:in
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
call’n/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/daemons-1.1.4/lib/daemons/cmdline.rb:109:in
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
block 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
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 |

解决方法

我在谷歌搜索同样的问题,我找到了一个解决方案(它对我有用).

将这两行添加到config / application.rb的头部

require ‘yaml’

YAML::ENGINE.yamler = ‘syck’

然后,重新启动服务器(webrick / thin / whatever)和delayed_job
(bundle exec ./script/delayed_job restart)

完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读