File tree 3 files changed +22
-2
lines changed
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:
95
95
* ` save `
96
96
* ` destroy `
97
97
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
+
98
105
The example SqlBypass class is a generic SQL session store. You may
99
106
use it as a basis for high-performance database-specific stores.
100
107
Original file line number Diff line number Diff line change @@ -8,13 +8,18 @@ namespace 'db:sessions' do
8
8
9
9
desc "Clear the sessions table"
10
10
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
12
17
end
13
18
14
19
desc "Trim old sessions from the table (default: > 30 days)"
15
20
task :trim => [ :environment , 'db:load_config' ] do
16
21
cutoff_period = ( ENV [ 'SESSION_DAYS_TRIM_THRESHOLD' ] || 30 ) . to_i . days . ago
17
- ActiveRecord :: SessionStore :: Session .
22
+ ActionDispatch :: Session :: ActiveRecordStore . session_class .
18
23
where ( "updated_at < ?" , cutoff_period ) .
19
24
delete_all
20
25
end
Original file line number Diff line number Diff line change @@ -63,6 +63,14 @@ def test_upgrade_task
63
63
assert Session . find_by_session_id ( Rack ::Session ::SessionId . new ( "original_session_id" ) . private_id )
64
64
assert Session . find_by_session_id ( "2::secure_session_id" )
65
65
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
66
74
end
67
75
end
68
76
end
You can’t perform that action at this time.
0 commit comments