开发者

Rails classes reloading in production mode

Is there a way to reload ruby model in runtime?

For example I've a model

class Model
  def self.all_models
    @@all_models ||= Model.all
  end    
end

Records in this model are changed ve开发者_开发技巧ry rarely, but then they do, I don't want to reload whole application, just this one class.


On a Development server, this is not a problem. A production server is a big one.

In reality it's not feasible without restarting the server. The best you could do is add a before filter in ApplicationController to update class variables in each worker thread, but it has to be done on every request. You can't turn this behaviour off and on easily.

If it's an resource intensive operation, you can settle for a less intensive test like a comparing value in a database/last modified time of a file to a constant defined at runtime in an effort to determine if the full reload should occur. But you would still have to do this as part of every request.

However, to the best of my knowledge modifying routes once the server has been loaded is impossible. Modifying other site wide variables may require a little more effort, such as reading from a file/database and updating in a before filter.

There may be another way, but I haven't tried it at all. So there's no guarantee. If you're using a ruby based server such as mongrel. In theory you could use hijack to update the model/routes/variables in the control thread from which, worker threads are spawned from.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜