Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added create_session_table, drop_session_table, and purge_session_tab…

…le as rake tasks for databases that supports migrations (MySQL, PostgreSQL, SQLite) to get a table for use with CGI::Session::ActiveRecordStore. Added configuration of session options through config.session_options in Rails::Configuration

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2219 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit d25fe84a01bd026945f1e86b1f651094f66151b2 1 parent e14acca
@dhh dhh authored
View
2  railties/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added create_session_table, drop_session_table, and purge_session_table as rake tasks for databases that supports migrations (MySQL, PostgreSQL, SQLite) to get a table for use with CGI::Session::ActiveRecordStore
+
* Added dump of schema version to the db_structure_dump task for databases that support migrations #1835 [Rick Olson]
* Fixed script/profiler for Ruby 1.8.2 #1863 [Rick Olson]
View
4 railties/environments/environment.rb
@@ -18,6 +18,10 @@
# (by default production uses INFO, the others DEBUG)
# config.log_level = Logger::DEBUG
+ # Use the database for sessions instead of the file system
+ # (create the session table with 'rake create_session_table')
+ # config.session_options[:database_manager] = CGI::Session::ActiveRecordStore
+
# See Rails::Configuration for more options
end
View
12 railties/lib/initializer.rb
@@ -39,6 +39,7 @@ def process
initialize_framework_logging
initialize_framework_views
initialize_routing
+ initialize_session_settings
end
def set_load_path
@@ -94,6 +95,11 @@ def initialize_routing
ActionController::Routing::Routes.reload
Object.const_set "Controllers", Dependencies::LoadingModule.root(*configuration.controller_paths)
end
+
+ def initialize_session_settings
+ return if !configuration.frameworks.include?(:action_controller)
+ ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS.merge!(configuration.session_options)
+ end
end
# The Configuration class holds all the parameters for the Initializer and ships with defaults that suites most
@@ -105,6 +111,7 @@ def initialize_routing
# Rails::Initializer.run(:process, config)
class Configuration
attr_accessor :frameworks, :load_paths, :log_level, :log_path, :database_configuration_file, :view_path, :controller_paths
+ attr_accessor :session_options
def initialize
self.frameworks = default_frameworks
@@ -113,6 +120,7 @@ def initialize
self.log_level = default_log_level
self.view_path = default_view_path
self.controller_paths = default_controller_paths
+ self.session_options = default_session_options
self.database_configuration_file = default_database_configuration_file
end
@@ -182,5 +190,9 @@ def default_view_path
def default_controller_paths
[ File.join(RAILS_ROOT, 'app', 'controllers'), File.join(RAILS_ROOT, 'components') ]
end
+
+ def default_session_options
+ {}
+ end
end
end
View
30 railties/lib/tasks/databases.rake
@@ -37,7 +37,7 @@ task :clone_structure_to_test => [ :db_structure_dump, :purge_test_database ] do
ActiveRecord::Base.connection.execute(ddl)
end
else
- raise "Unknown database adapter '#{abcs["test"]["adapter"]}'"
+ raise "Task not supported by '#{abcs["test"]["adapter"]}'"
end
end
@@ -59,7 +59,7 @@ task :db_structure_dump => :environment do
`scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /f db\\#{RAILS_ENV}_structure.sql /q /A /r`
`scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /F db\ /q /A /r`
else
- raise "Unknown database adapter '#{abcs["test"]["adapter"]}'"
+ raise "Task not supported by '#{abcs["test"]["adapter"]}'"
end
if ActiveRecord::Base.connection.supports_migrations?
@@ -92,6 +92,30 @@ task :purge_test_database => :environment do
ActiveRecord::Base.connection.execute(ddl)
end
else
- raise "Unknown database adapter '#{abcs["test"]["adapter"]}'"
+ raise "Task not supported by '#{abcs["test"]["adapter"]}'"
end
+end
+
+desc "Creates a sessions table for use with CGI::Session::ActiveRecordStore"
+task :create_session_table => :environment do
+ raise "Task unavailable to this database (no migration support)" unless ActiveRecord::Base.connection.supports_migrations?
+
+ ActiveRecord::Base.connection.create_table :sessions do |t|
+ t.column :sessid, :string
+ t.column :data, :text
+ t.column :updated_at, :datetime
+ end
+
+ ActiveRecord::Base.connection.add_index :sessions, :sessid
+end
+
+desc "Drop the sessions table"
+task :drop_session_table => :environment do
+ raise "Task unavailable to this database (no migration support)" unless ActiveRecord::Base.connection.supports_migrations?
+
+ ActiveRecord::Base.connection.drop_table :sessions
+end
+
+desc "Drop and recreate the session table (much faster than 'DELETE * FROM sessions')"
+task :purge_session_table => [ :drop_session_table, :create_session_table ] do
end
Please sign in to comment.
Something went wrong with that request. Please try again.