扩展 Rails 4 个引擎模型有问题
Extending Rails 4 engine models with concerns
我正在尝试通过应用程序初始化程序从引擎 2 扩展引擎 1 的模型,但我遇到了一些奇怪的行为,这就是我得到的:
关注
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
class 可以调用方法 jump
,但是一旦我更改主机应用程序中的任何代码,我就会收到以下错误:
NoMethodError (undefined method 'jump' for #<Engine1::Member:0x007fe7533b4f10>)
我必须重新加载服务器,然后它再次正常工作,直到我在主机应用程序中进行另一次更改,然后它再次抛出错误,为什么会发生这种情况,我该如何避免?
有没有更好的地方我应该执行 class 打开以包含关注点而不是初始化程序?
所以我终于弄明白了,基本上发生的事情是在开发模式下,每个模型都会在每次代码更改时重新加载,但是初始化器在服务器启动时只 运行 一次,所以一旦代码更改在控制器中,模型已重新加载但不再包含问题,因此会中断。
我通过将初始化程序的代码移动到 application.rb
中的 to_prepare
块来解决它。
对于那些不知道的人,to_prepare
添加了一个准备回调,它将 运行 在开发模式下的每个请求之前,或在生产模式下的第一个请求之前。
我正在尝试通过应用程序初始化程序从引擎 2 扩展引擎 1 的模型,但我遇到了一些奇怪的行为,这就是我得到的:
关注
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
class 可以调用方法 jump
,但是一旦我更改主机应用程序中的任何代码,我就会收到以下错误:
NoMethodError (undefined method 'jump' for #<Engine1::Member:0x007fe7533b4f10>)
我必须重新加载服务器,然后它再次正常工作,直到我在主机应用程序中进行另一次更改,然后它再次抛出错误,为什么会发生这种情况,我该如何避免?
有没有更好的地方我应该执行 class 打开以包含关注点而不是初始化程序?
所以我终于弄明白了,基本上发生的事情是在开发模式下,每个模型都会在每次代码更改时重新加载,但是初始化器在服务器启动时只 运行 一次,所以一旦代码更改在控制器中,模型已重新加载但不再包含问题,因此会中断。
我通过将初始化程序的代码移动到 application.rb
中的 to_prepare
块来解决它。
对于那些不知道的人,to_prepare
添加了一个准备回调,它将 运行 在开发模式下的每个请求之前,或在生产模式下的第一个请求之前。