aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/CHANGELOG2
-rw-r--r--railties/environments/environment.rb4
-rw-r--r--railties/lib/initializer.rb12
-rw-r--r--railties/lib/tasks/databases.rake30
4 files changed, 45 insertions, 3 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index a2a099155f..6a3d7ac041 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 c1da6f5482..1c3b1219e4 100644
--- a/railties/environments/environment.rb
+++ b/railties/environments/environment.rb
@@ -18,6 +18,10 @@ Rails::Initializer.run do |config|
# (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 fd9f2fb61a..c714b3b621 100644
--- a/railties/lib/initializer.rb
+++ b/railties/lib/initializer.rb
@@ -39,6 +39,7 @@ module Rails
initialize_framework_logging
initialize_framework_views
initialize_routing
+ initialize_session_settings
end
def set_load_path
@@ -94,6 +95,11 @@ module Rails
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 @@ module Rails
# 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 @@ module Rails
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 @@ module Rails
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 e7ae234b53..077bfe296a 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