在我的设备模型中,我尝试在lib类上调用类方法,但在生产中我得到了
NameError (uninitialized constant Device::Push):
它适用于发展。
但我不会调用Device :: Push类。而不是我在我的设备模型中所做的事情:
class Device < ActiveRecord::Base
...
after_update :send_notifications
...
def send_notifications
Push::NotificationFactory.send(device: self) if (self.push_token_changed? && ! self.push_token.nil?)
end
end
在lib / push / notification_factory.rb中,应该调用以下类:
module Push
class NotificationFactory
def self.send(device: )
n = Rpush::Apns::Notification.new
n.app = Rpush::Apns::App.find_by_name(Rails.configuration.x.app['push']['app_name'])
n.device_token = device.push_token
n.alert = 'Welcome to PrizeArena!'
n.save!
end
end
end
这是我收到的错误消息:
2016-02-28T13:40:51.407542+00:00 app[web.1]: NameError (uninitialized constant Device::Push):
2016-02-28T13:40:51.407543+00:00 app[web.1]: app/models/device.rb:77:in `send_notifications'
2016-02-28T13:40:51.407544+00:00 app[web.1]: app/controllers/api/v1/users_controller.rb:44:in `update'
如果有人可以指出NameError的来源,那会很棒。
答案 0 :(得分:0)
NameError(未初始化的常量Device :: Push)
您需要使用include
在module
中嵌入class
。
class Device < ActiveRecord::Base
include Push
...
after_update :send_notifications
...
def send_notifications
Push::NotificationFactory.send(device: self) if (self.push_token_changed? && ! self.push_token.nil?)
end
end
答案 1 :(得分:0)
我想出了为什么它在开发方面有效但在生产方面没有用的问题。
我在自动加载路径中添加了lib,但需要将其添加到eager_load_path。
您需要添加
*_sended.txt
到application.rb
问题只发生在生产上,而不是发展上,因为生产Rails默认情况下eager_loads环境。
更多信息: http://blog.arkency.com/2014/11/dont-forget-about-eager-load-when-extending-autoload/