请求Rails服务器后,ActiveRecord回调消失

时间:2012-08-29 20:28:27

标签: ruby-on-rails ruby activerecord

我们有一个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

的子域名
  • Rails 3.1.1
  • Ruby 1.9.2-p180

谢谢:)

2 个答案:

答案 0 :(得分:2)

这个问题似乎是一个类似的问题,关于开发模式中的猴子补丁,它有一个潜在的解决方案:

How to monkey-patch code that gets auto-loaded in Rails?

答案 1 :(得分:0)

在开发模式下的rails中,当有新请求进入时会重新加载所有模型。这很有用,因为每次更改内容时都不必重新安装服务器。但是,在prod中,由于存在性能损失,因此不会发生这种情况。这里的问题是初始化程序只在rails app的初始化期间运行。我可能会问为什么你要在初始化器中设置after_create而不是模型本身?