首先,我有一个类 app / workes / 这样的课程:
class SendMailTask
include Resque::Plugins::Status
require 'mail'
def perform
...
end
作为一个控制器,我有类UsersController和静态方法,如bellow:
class UsersController < ApplicationController
def self.check
...
::SendMailTask.create(to: [] << @to_addresses, subject: @subject, body: @body)
end
当我从其他文件调用方法UsersController.check()时,我收到错误:“in block in check':未初始化的常量SendMailTask(NameError)”
但是从其他控制器,我可以正常调用SendMailTask:
class ErrorController < ApplicationController
def index
...
::SendMailTask.create(to: [] << @to_addresses, subject: @subject, body: @body)
end
我尝试添加此行:
config.autoload_paths += %W(#{config.root}/app/workers)
到 application.rb 并尝试添加
要求'./SendMailTask'
在文件 users_controller.rb 的开头,但它不起作用。
请帮我解决此错误。谢谢你
答案 0 :(得分:1)
NameError表示未加载SendMailTask
。所以你必须加载它。所以有几件事情。
我注意到了一个拼写错误workes
,所以请验证文件名是否正确。根据公约,它应位于app/workers/send_mail_task.rb
。如此亲切的双重检查相同。
关于require './SendMailTask'
,这是错误的。相反,send_mail_task
根据需要对文件名&amp;不是班级名称。
如果仍然出现错误,请发布您的$LOAD_PATH
以确定您需要相对于定义的$LOAD_PATH
我更喜欢使用require
代替require_dependency
,因为它适用于代码重新加载等。所以如果您在自动加载时遇到问题,只需将require_dependency放在文件,这将提示rails在运行控制器之前加载文件。