簡體   English   中英

Rails 5-管理會話數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM