File tree Expand file tree Collapse file tree 3 files changed +22
-2
lines changed Expand file tree Collapse file tree 3 files changed +22
-2
lines changed Original file line number Diff line number Diff line change @@ -95,6 +95,13 @@ You must implement these methods:
9595* ` save `
9696* ` destroy `
9797
98+ Note that some of the provided [ rake tasks] ( https://github.com/rails/activerecord-session_store/blob/master/lib/tasks/database.rake )
99+ require additional methods to be implemented:
100+
101+ * ` db:sessions:clear ` depends on ` table_name `
102+ * ` db:sessions:trim ` depends on ` where ` and ` delete_all `
103+ * ` db:sessions:upgrade ` depends on ` secure! `
104+
98105The example SqlBypass class is a generic SQL session store. You may
99106use it as a basis for high-performance database-specific stores.
100107
Original file line number Diff line number Diff line change @@ -8,13 +8,18 @@ namespace 'db:sessions' do
88
99 desc "Clear the sessions table"
1010 task :clear => [ :environment , 'db:load_config' ] do
11- ActiveRecord ::Base . connection . execute "TRUNCATE TABLE #{ ActiveRecord ::SessionStore ::Session . table_name } "
11+ if ActiveRecord ::Base . connection . respond_to? ( :truncate )
12+ # Rails 6+
13+ ActiveRecord ::Base . connection . truncate ( ActionDispatch ::Session ::ActiveRecordStore . session_class . table_name )
14+ else
15+ ActiveRecord ::Base . connection . execute "TRUNCATE TABLE #{ ActiveRecord ::SessionStore ::Session . table_name } "
16+ end
1217 end
1318
1419 desc "Trim old sessions from the table (default: > 30 days)"
1520 task :trim => [ :environment , 'db:load_config' ] do
1621 cutoff_period = ( ENV [ 'SESSION_DAYS_TRIM_THRESHOLD' ] || 30 ) . to_i . days . ago
17- ActiveRecord :: SessionStore :: Session .
22+ ActionDispatch :: Session :: ActiveRecordStore . session_class .
1823 where ( "updated_at < ?" , cutoff_period ) .
1924 delete_all
2025 end
Original file line number Diff line number Diff line change @@ -63,6 +63,14 @@ def test_upgrade_task
6363 assert Session . find_by_session_id ( Rack ::Session ::SessionId . new ( "original_session_id" ) . private_id )
6464 assert Session . find_by_session_id ( "2::secure_session_id" )
6565 end
66+
67+ def test_clear_task
68+ Session . create! ( data : "obsolete" )
69+
70+ Rake . application . invoke_task 'db:sessions:clear'
71+
72+ assert_equal 0 , Session . count
73+ end
6674 end
6775 end
6876end
You can’t perform that action at this time.
0 commit comments