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

#1
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 :)
 
#3
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...
 
Top