當發生cookie溢出問題時,我使用以下stackoverflow答案來利用活動記錄存儲並創建會話表。會話存儲,活動記錄存儲將太多行保存到heroku數據庫
Cookie overflow in rails application?
不過,現在我已經因爲每次會話創建一行到達了我的Heroku數據庫限制。
有沒有辦法讓會話過期並在一段時間後刪除?我是否缺少一個不包含在stackoverflow答案中的步驟?
謝謝你的幫助!
當發生cookie溢出問題時,我使用以下stackoverflow答案來利用活動記錄存儲並創建會話表。會話存儲,活動記錄存儲將太多行保存到heroku數據庫
Cookie overflow in rails application?
不過,現在我已經因爲每次會話創建一行到達了我的Heroku數據庫限制。
有沒有辦法讓會話過期並在一段時間後刪除?我是否缺少一個不包含在stackoverflow答案中的步驟?
謝謝你的幫助!
大約一年前,我遇到了一個非常類似的問題,我的解決方案是編寫一個使用Heroku scheduler free add-on經常運行的rake任務。這裏的耙子任務:
namespace :maintenance do
desc "Cleanup stale sessions (optional ENV[\"BEFORE_DATE\"] = yyyy/mm/dd)"
task :clear_stale_sessions => :environment do
before_date = ENV["BEFORE_DATE"] || 1.week.ago
start_timestamp = Time.now
if Rails.env.production?
puts "#{start_timestamp} -- Beginning deleting of stale sessions before #{before_date}..."
else
Rails.logger.info "#{start_timestamp} -- Beginning deleting of stale sessions before #{before_date}..."
end
deleted_session_count = ActiveRecord::SessionStore::Session.delete_all(["updated_at <= ?", before_date])
finished_timestamp = Time.now
current_session_count = ActiveRecord::SessionStore::Session.count
if Rails.env.production?
puts "#{Time.now} -- Finished deleting of stale sessions before #{before_date} -- Deleted Sessions: #{deleted_session_count} - Current Sessions: #{current_session_count} -- Time: #{(finished_timestamp - start_timestamp)} seconds."
else
Rails.logger.info "#{Time.now} -- Finished deleting of stale sessions before #{before_date} -- Deleted Sessions: #{deleted_session_count} - Current Sessions: #{current_session_count} -- Time: #{(finished_timestamp - start_timestamp)} seconds."
end
end
end
的基本思想是刪除一個多星期年長任何會話信息,但您可以使用Heroku的的BEFORE_DATE
環境變量更改此設置到任何你想要的值。請注意,在第一次運行中,這可能需要相當長的時間,具體取決於您有多少過時的會話,但後續運行應該更快。
我每天早上都會運行一次(再次使用Scheduler插件),它使我的數據庫大小顯着下降。我還爲這個耙子任務添加了一些日誌記錄,這樣我就可以很快看到它是如何做的,而不必定期觀看它。如果你願意,你可以刪除它。
重要的是要注意,如果您的應用程序使用了所有Heroku dyno小時,則調度程序將導致向您的信用卡收取一些動態小時數。換句話說,附加組件是免費的,但使用它可能不是。
謝謝您的回覆。我無法測試答案,因爲我必須從這個問題開始並通過手動刪除行來解決問題。我相信你的回答是正確的,我會標記它,但會執行它,並在評估後再次。謝謝! – MicFin