Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
== SqlSessionStore See http://railsexpress.de/blog/articles/2005/12/19/roll-your-own-sql-session-store Only Mysql, Postgres and Oracle are currently supported (others work, but you won't see much performance improvement). == Step 1 If you have generated your sessions table using rake db:sessions:create, go to Step 2 If you're using an old version of sql_session_store, run script/generate sql_session_store DB where DB is mysql, postgresql or oracle Then run rake migrate or rake db:migrate for new versions of Rails. == Step 2 Initialisation depends on the Rails version being used: === Older Rails versions If you are using a version before 2.3, add the code below after the initializer config section: ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS. update(:database_manager => SqlSessionStore) Then, depending on your database type, add SqlSessionStore.session_class = MysqlSession or SqlSessionStore.session_class = PostgresqlSession or SqlSessionStore.session_class = OracleSession after the initializer section in environment.rb === Rails 2.3 Rails 2.3 uses rack based sessions, which require that the session storage manager shows up in a certain position in the middleware stack. The Rails initializer has special code built in to ensure this for active record store. Therfore, the following steps will ensure that sql session store ends up in the correct place: * set up active recordstore as the session store in the config section * replace active record store with sql session store after the initializer section Rails::Initializer.run do |config| config.action_controller.session_store = :active_record_store ... end ... ActionController::Dispatcher.middleware.swap(:"ActiveRecord::SessionStore", SqlSessionStore) ActionController::Base.session_store = SqlSessionStore SqlSessionStore.session_class = MysqlSession It is really important that sql session store ends up in the same place in the middleware stack as active record store. More specifically: it must be placed below the connection management middleware. Your middleware stack should look similar to the following one: use Rack::Lock use ActionController::Failsafe use ActionController::Reloader use ActiveRecord::ConnectionAdapters::ConnectionManagement use ActiveRecord::QueryCache use SqlSessionStore use ActionController::ParamsParser use Rack::MethodOverride use Rack::Head run ActionController::Dispatcher.new You can run rake middlware to verify your setup. == Step 3 (optional) If you want to use a database separate from your default one to store your sessions, specify a configuration in your database.yml file (say sessions), and establish the connection on SqlSession in environment.rb: SqlSession.establish_connection :sessions == IMPORTANT NOTES 1. The class name SQLSessionStore has changed to SqlSessionStore to let Rails work its autoload magic. 2. You will need the binary drivers for Mysql or Postgresql. These have been verified to work: * ruby-postgres (0.7.1.2005.12.21) with postgreql 8.1 * ruby-mysql 2.7.1 with Mysql 4.1 * ruby-mysql 2.7.2 up to 2.7.7 with Mysql 5.0