当前位置:  开发笔记 > 后端 > 正文

Rails Resque外部模块中未定义的方法错误

如何解决《RailsResque外部模块中未定义的方法错误》经验,为你挑选了1个好方法。

我无法从resque worker中的包含模块调用方法.在下面的示例中,当我尝试say在worker(在TestLib模块中)中调用方法时,我一直得到未定义的方法错误.我已将代码简化为基础知识来说明问题:

控制器 (/app/controllers/test_controller.rb)

class TestController < ApplicationController
  def testque
    Resque.enqueue( TestWorker, "HI" )
  end
end

(/lib/test_lib.rb)

module TestLib
  def say( word )
    puts word
  end
end

工人 (/workers/test_worker.rb)

require 'test_lib'

class TestWorker
  include TestLib

  @queue = :test_queue

  def self.perform( word )
    say( word ) #returns: undefined method 'say' for TestWorker:Class
    TestLib::say( word ) #returns: undefined method 'say' for TestLib::Module
  end
end

Rakefile (resque.rake)

require "resque/tasks"
task "resque:setup" => :environment

我正在使用以下命令运行resque: rake environment resque:work QUEUE='*'

Gems:rails(3.0.4)redis(2.2.2)redis-namespace(1.0.3)resque(1.19.0)

服务器:nginx/1.0.6

任何人都对那里发生了什么有任何想法?



1> Peter Brown..:

包含模块时,其方法将成为实例方法.当你扩展时,它们就变成了类方法.你只需要改变include TestLibextend TestLib它应该工作.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有