This repository has been archived by the owner on Mar 23, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Fast sql based session storage for Rails
License
skaes/sql_session_store
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
== 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
About
Fast sql based session storage for Rails
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published