diff --git a/railties/CHANGELOG b/railties/CHANGELOG index a2a099155f035..6a3d7ac041c47 100644 --- a/railties/CHANGELOG +++ b/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] diff --git a/railties/environments/environment.rb b/railties/environments/environment.rb index c1da6f5482214..1c3b1219e466c 100644 --- a/railties/environments/environment.rb +++ b/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 diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index fd9f2fb61a6dc..c714b3b621a7a 100644 --- a/railties/lib/initializer.rb +++ b/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 diff --git a/railties/lib/tasks/databases.rake b/railties/lib/tasks/databases.rake index e7ae234b53d1a..077bfe296a196 100644 --- a/railties/lib/tasks/databases.rake +++ b/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 \ No newline at end of file