我们有一个Rails应用程序,其中after_create从初始化程序动态添加到ActiveRecord模型。
我们尝试过instance_eval
Foo.instance_eval do
send "after_create", lambda{|r| r.some_method}
end
和class_eval
Foo.class_eval do
after_create lambda{|r| r.some_method}
end
在创建它们之后运行Foo.new._create_callbacks
时,它会返回两个回调。
在向Rails服务器发出请求后,两个回调消失。
此问题仅发生在开发中。分期和生产工作正常。
在config.cache_classes = true
中设置development.rb
时,回调将会持续存在而不会消失。
我们已在其他应用程序中复制此代码并且工作正常,因此可能是配置问题。
注意:我们正在使用 lvh.me
的子域名谢谢:)
答案 0 :(得分:2)
这个问题似乎是一个类似的问题,关于开发模式中的猴子补丁,它有一个潜在的解决方案:
答案 1 :(得分:0)
在开发模式下的rails中,当有新请求进入时会重新加载所有模型。这很有用,因为每次更改内容时都不必重新安装服务器。但是,在prod中,由于存在性能损失,因此不会发生这种情况。这里的问题是初始化程序只在rails app的初始化期间运行。我可能会问为什么你要在初始化器中设置after_create而不是模型本身?