[英]Rails 5 - Managing Sessions Data
我有一個模型profile
並且有一個設計模型user
。 目前,我在devise會話控制器中有一個自定義方法,可以通過以下會話來檢查profile_id:
after_action :assign_profile, only: [:create]
def assign_profile
if session[:profile_id]
@tutor.profile = Profile.find(session[:profile_id]) if @tutor.persisted?
session.delete(:profile_id)
end
end
這里的問題是直到最近才引起我的注意,我必須對會話數據庫進行一些整理。 我最近在開發環境中運行了rake db:reset
,因為我想測試一個“新”站點。
現在,以新user
Couldn't find Profile with 'id'=4
登錄時,我遇到此錯誤: Couldn't find Profile with 'id'=4
。 顯然,這意味着我的會話數據庫尚未擦除。 我還嘗試清除瀏覽器的緩存並重新啟動Rails服務器(實際上我使用的是隱身模式,因此這不應該成為問題),但這也不起作用。
我做了一些簡單的谷歌搜索,然后運行了正確的任務,據說應該是rake db:sessions:clear
。 但是,這給了我這個錯誤: Don't know how to build task 'db:sessions:clear' (see --tasks)
。
所以現在,我被困住了。 我無法測試我的網站,也無法弄清楚如何清除開發會話數據庫並從頭開始。 (我正在運行Rails 5.1)
更新:我已經嘗試過包含以下rake任務(以后將作為cron作業運行)
desc "Clear expired sessions"
task :clear_expired_sessions => :environment do
sql = "DELETE FROM sessions WHERE updated_at < (CURRENT_TIMESTAMP - INTERVAL '1 days');"
ActiveRecord::Base.connection.execute(sql)
end
我收到此錯誤:
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "sessions" does not exist
現在我更加困惑了。 那么我的會話存儲在哪里? 在能夠以這種方式處理會話之前,我應該包括此活動記錄會話存儲庫嗎?
更新2:重新啟動計算機已經清除了持久的會話數據。 盡管如果有人能夠解決我所面臨的問題,我仍然非常感激。
更改Rails秘密密鑰將使所有cookie失效。
要清理在計算機重新啟動時實際上已經發生的所有臨時存儲,請運行rails tmp:clear
任務-請參閱此處的tmp
描述 。
或者,您可以創建一個自定義任務來清除緩存存儲:
# lib/tasks/sessions.rake:
namespace :sessions do
desc "Clear Rails.sessions"
task :clear do
ActiveSupport::Cache.lookup_store(Rails.configuration.cache_store).clear
puts "Successfully cleared Rails.sessions!"
end
end
然后運行:
$ bundle exec rake sessions:clear
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.