我试图通过应用程序初始化器从引擎1扩展模型,并关注引擎2,但是我得到了一些奇怪的行为,下面是我所得到的:
Concern
module Engine2
module Concerns
module MyConcern
extend ActiveSupport::Concern
included do
puts "Concern included!"
end
def jump
puts 'Jumping!!!!'
end
end
end
end
初始化器
require 'engine2/my_concern'
module Engine1
class Member
include Engine2::Concerns::MyConcern
end
end
当我启动应用程序时,我看到控制台中的Concern included!
消息,Member
类可以调用方法jump
,但是一旦我更改了主机应用程序中的任何代码,我就会得到以下错误:
NoMethodError (undefined method 'jump' for #<Engine1::Member:0x007fe7533b4f10>)
我必须重新加载服务器,然后它再次正常工作,直到我对主机应用程序进行另一次更改,然后它再次抛出错误,为什么会发生这种情况,我如何避免它?
是否有一个更好的地方,我应该执行类打开,以包括关注,而不是初始化?
发布于 2016-12-11 17:30:04
所以我终于明白了,基本上,在开发模式下,每个模型都被重新加载到每个代码更改上,但是初始化器只在服务器启动时运行一次,所以一旦控制器中的代码发生变化,模型就会重新加载,但不再包含关注,因此就会中断。
我通过将初始化程序的代码移动到application.rb
中的一个application.rb
块来解决这个问题。
对于那些不知道的人,to_prepare
添加了一个准备回调,该回调将在开发模式下的每个请求之前运行,或者在生产中的第一个请求之前运行。
https://stackoverflow.com/questions/40998934
复制相似问题