A cautionary tale: Cache.reset to reset memcache at the end of your environment

Discussion in 'Ruby/Rails' started by fantasydreaming, Mar 13, 2007.

  1. fantasydreaming

    fantasydreaming New Member

    Litespeed attempts to make starting up very fast, and it does so by loading junk in a parent process, then doing the fork. That way, all that disk-scouring to find all the rails files, which takes about 6 seconds of heavy iowait, is only done once.

    However it also means any connections you initialize will also be shared among child processes.

    Database connections - the lsapi parent process explicitly disconnects after loading, so they'll be re-initialized for each child.

    Memcache connections you need to do yourself. I do so at the bottom of my environment.rb (I'm using memcache-client, which sets a global CACHE):
    CACHE.reset


    Furthermore, if you want to speed things up even more you can load your controller files in the environment, rather than on demand. That way, they'll be pre-loaded for your child processes, and you'll have significantly more shared memory:

    if RAILS_ENV=='production'
    require_dependency 'application'
    Dir.foreach( "#{RAILS_ROOT}/app/models" ) {|f| $logger.d "r #{f}"; silence_warnings{require_dependency f} if f =~ /\.rb$/}
    Dir.foreach( "#{RAILS_ROOT}/app/controllers" ) {|f| $logger.d "r #{f}"; silence_warnings{require_dependency f} if f =~ /\.rb$/}
    end

    If you're using engines (I am), you'll want to throw in your engine directories in there too.

    Thanks again to litespeed people for a great project, and for making a free version available. I hope we all consider purchasing a license at some point :)
  2. mistwang

    mistwang LiteSpeed Staff

    Thanks for the write up. :)

    If you don't mind, I will post it on our Wiki.
  3. fantasydreaming

    fantasydreaming New Member

    Just a quick reply to this to say that this hasn't totally solved my problems with this :( So I'll keep ya posted if I figure it out. Something wierd is going on...

Share This Page