2014-01-18 3 views
1

devise를 사용하여 레일스에서 ​​쿠키 저장소 오버플로 문제가 발생했습니다. 다른 세션 저장소를 사용할 때가 된 것 같습니다. 물론 redis가 문제를 해결할 수는 있지만 개발 시스템에서 redis를 사용하고 싶지는 않습니다. php와 같은 파일 시스템 저장소가 있는지 궁금합니다. 이 기능을 사용하여 개발 컴퓨터에 세션을 저장하고 싶습니다. Google을 검색했지만 구체적인 내용을 찾지 못했습니다. 너무 복잡해서는 안됩니다. 분명히 뭔가 빠졌습니다.레일스가 파일 시스템에 세션을 저장합니다.

+0

왜 redis를 사용할 수 없습니까? 그것은 귀하의 요구 사항에 맞는 솔루션입니다. 그런 말로하면, 실제로 파일을 로컬에서 열고, 쓰기를 한 다음 나중에 레일 앱 안에서 읽을 수있는 방법을 찾고 있습니까? – SudoGuru

+0

아니요. 저는 PHP 같은 파일을 사용하는 세션 저장소를 찾고 있습니다. 개발 시스템에 redis를 설치하고 싶지 않습니다. 또한 2 대의 랩톱을 사용하고 Windows와 Linux를 번갈아 사용하기 때문에 모든 컴퓨터에 redis를 설치하고 싶지 않습니다. 필자의 개발 요구에 맞는 파일 시스템. 생산 (또는 테스트)을 위해 redis 스토어를 사용할 것입니다. –

+0

@SomeshMukherjee Windows에서 얼마나 복잡한 지 알 수는 없지만 Linux 설정에서 redis는 sudo apt-get install redis (또는'sudo yum redis 설치'). 'redis-server'를 실행하면됩니다 (원하지 않는 경우에는 설정이 필요 없습니다). – panzi

답변

3

레일스는 세션을 관리하는 분리 된 방식을 가지고 있으므로 파일을 사용하여 데이터를 저장하는 사용자 지정 세션 저장소를 구현할 수 있습니다. 그러나 개발시이를 엄격하게 사용해야하며 파일 I/O 속도는 RAM만큼 빠르지 않으며 응용 프로그램에 심각한 병목 현상이 될 수 있음에 유의하십시오. 여기

파일 시스템을 사용하여 사용자 정의 세션 저장소의 완전한 구현은 "LIB"의 "custom_file_store.rb"로 저장

class CustomFileStore < ActionDispatch::Session::AbstractStore 
    def get_session(env, session_id) 
    session_data = {} 
    session_id ||= generate_sid 
    File.open(tmp_file(session_id),'r') do |f| 
     data = f.read 
     session_data = ::Marshal.load(data) unless data.empty? 
    end rescue nil 
    [session_id, session_data] 
    end 

    def set_session(env, session_id, session_data, options) 
    File.open(tmp_file(session_id), 'w+') do |f| 
     encoded = ::Marshal.dump(session_data) 
     f.write(encoded) 
    end 
    session_id 
    end 

    def destroy_session(env, session_id, options) 
    File.unlink(tmp_file(session_id)) if File.exists?(tmp_file(session_id)) 
    generate_sid 
    end 

    def tmp_file(session_id) 
    File.join(Rails.root, 'tmp', 'sessions', session_id) 
    end 
end 

(코드는 광산, 링크 끝에되지 않습니다) 폴더, 후 다야 "설정/초기화/session_store.rb" (응용 프로그램의 이름을 RailsApp 변경)

RailsApp::Application.config.session_store :custom_file_store 

에 다음 코드를 사용하여 사용하도록 응용 프로그램을 구성! 여기에서이 코드의 원 작성자의 기사를 확인하십시오. http://bradpauly.com/blog/2013-02-01-rails-3-custom-session-store.html

관련 문제