내 webapp는 세션 데이터를 암호화해야합니다. 내가 설정 한 내용은 다음과 같습니다.레일 3.1 : 웹 애플 리케이션 (레일 서버/유니콘/등)에 대해서만 이니셜 라이저를 실행하는 방법
config/initializers/encryptor.rb:
require 'openssl'
require 'myapp/encryptor'
MyApp::Encryptor.config[ :random_key ] = OpenSSL::Random.random_bytes(128)
Session.delete_all
app/models/session.rb:
require 'attr_encrypted'
class Session < ActiveRecord::Base
attr_accessible :session_id, :data
attr_encryptor :data, :key => proc { MyApp::Encryptor.config[ :random_key ] }, :marshal => true
# Rest of model stuff
end
모든 것이 훌륭하게 작동하고 세션 데이터를 안전하게 유지합니다. 문제는 다음과 같습니다. 사용자 정의 레이크 작업을 실행할 때 이니셜 라이저를로드하고 모든 세션을 지 웁니다. 안좋다!
이니셜 라이저에 webapp 초기화를 위해서만 실행되도록하려면 무엇을 넣을 수 있습니까? 또는 레이크 작업으로 실행하지 않도록하려면 이니셜 라이저에 무엇을 넣을 수 있습니까?
업데이트 : 좋아, 지금까지 내가 수행 한 작업은 .rake 파일에 MYAPP_IN_RAKE = true unless defined? MYAPP_IN_RAKE
을 추가하는 것입니다. 그리고 나서 이니셜 라이저에서 다음을 수행합니다.
unless defined?(MYAPP_IN_RAKE) && MYAPP_IN_RAKE
# Web only initialization
end
작동합니다. 그러나 나는 다른 제안에 대해 개방적이다.
당신은이 같은`설정/application.rb '에서 응용 프로그램에 대한 수정을 할 수
이 미래에 다른 방법으로 당신을 무는 책임을 보인다. 서버가 다시 시작될 때마다 (의도 한 동작 인 것처럼 보이는) 모든 세션을 잃어 버릴 수 있지만 너무 많은 메모리를 사용하여 자동 저장되는 서버, 너무 오래 실행되는 요청 등을 포함합니다. –
단점을 이해하지만, 그럴만 한 가치가 있다고 생각합니다. 응용 프로그램을 다시 시작하는 중 세션 재설정 : 허용. 너무 많은 메모리 또는 너무 긴 요청? 유니콘 하에서 이러한 상황은 작업자 프로세스에서만 발생해야합니다. 그리고'preload_app = true'를 설정했기 때문에 초기화는 마스터에서만 발생합니다. 따라서 유니콘은 재 초기화를하지 않고도 작업자를 다시 생성 할 수 있습니다. – sbutler
[레일즈 서버 \'에서만 실행되고 레일스에서는 \ 등을 생성하지 않는 [레일즈 3 초기화 프로그램]의 가능한 복제본 (http://stackoverflow.com/questions/8660019/rails-3-initializers-that- run-on-on-rails-server-and-not-rails-generate-e) – davmac