I have deployed a Rails app that runs under lighttpd and is using an
Active Record session store.  Scott Barron kindly provided me with a
short Ruby script (quoted below) that will periodically sweep the
database clean of stale sessions based upon a period of inactivity.
When deploying this script, it creates a Session object.  This script
apparently looks at the environment.rb file to determine the
RAILS_ENV.  I say this, because when I tried to specify the
''production'' environment in the script, it said that it was
already
defined in environment.rb.
However, when called from this script, environment.rb thinks that the
environment is development, even though lighttpd is running the rails
in production mode.  (The database is not even defined for development
in database.yml, so I know that it is running in production mode).
The little script is picking up its ''development'' assumption
from this
line in environment.rb:
RAILS_ENV  = ENV[''RAILS_ENV''] ||
''development''
When I changed the ''development'' to
''production'' in this script, it
runs fine.  My question is, why does the environment.rb script not
pick up that rails is running in production mode, when called from
this script?
Shelby
_____________
#!/usr/local/bin/ruby
require File.dirname(__FILE__) + ''/../config/environment''
SESSION_TIMEOUT = 30.minutes
class Session < ActiveRecord::Base
end
stale = Session.find(:all, :conditions => ["updated_at <= ?",
Time.now
- SESSION_TIMEOUT])
stale.each { |s| s.destroy }
Shelby Westman wrote:>I have deployed a Rails app that runs under lighttpd and is using an >Active Record session store. Scott Barron kindly provided me with a >short Ruby script (quoted below) that will periodically sweep the >database clean of stale sessions based upon a period of inactivity. > >When deploying this script, it creates a Session object. This script >apparently looks at the environment.rb file to determine the >RAILS_ENV. I say this, because when I tried to specify the >''production'' environment in the script, it said that it was already >defined in environment.rb. > >However, when called from this script, environment.rb thinks that the >environment is development, even though lighttpd is running the rails >in production mode. (The database is not even defined for development >in database.yml, so I know that it is running in production mode). > >The little script is picking up its ''development'' assumption from this >line in environment.rb: >RAILS_ENV = ENV[''RAILS_ENV''] || ''development'' > >When I changed the ''development'' to ''production'' in this script, it >runs fine. My question is, why does the environment.rb script not >pick up that rails is running in production mode, when called from >this script? > >Shelby >_____________ > >#!/usr/local/bin/ruby >require File.dirname(__FILE__) + ''/../config/environment'' >SESSION_TIMEOUT = 30.minutes >class Session < ActiveRecord::Base >end >stale = Session.find(:all, :conditions => ["updated_at <= ?", Time.now >- SESSION_TIMEOUT]) >stale.each { |s| s.destroy } > > >Just add ENV[''RAILS_ENV'']=''production'' before the require. That should work. Or pass it as an argument to your script: ENV[''RAILS_ENV''] = ARGV[0] || ''production'' Hope that helps. -- stefan