Mi webapp necesita encriptar los datos de la sesión. Lo que configuro es:Rails 3.1: cómo ejecutar un inicializador solo para la aplicación web (rails server/unicorn/etc)
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
Todo funciona muy bien y mantiene los datos de la sesión seguros. Este es el problema: cuando ejecuto mis tareas personalizadas de rake, carga el inicializador y borra todas las sesiones. ¡No está bien!
¿Qué puedo poner en mi inicializador para asegurarme de que SOLO se ejecuta para la inicialización de la webapp? O bien, ¿qué puedo poner en mi inicializador para que NO se ejecute para tareas de rake?
Actualización: Bien, lo que he hecho por el momento es agregar MYAPP_IN_RAKE = true unless defined? MYAPP_IN_RAKE
a mi archivo .rake. Y luego en mi inicializador lo hago:
unless defined?(MYAPP_IN_RAKE) && MYAPP_IN_RAKE
# Web only initialization
end
Parece que funciona. Pero estoy abierto a otras sugerencias.
Esto parece obligado a morder en otras formas en el futuro. Cada vez que reinicie el servidor, perderá todas sus sesiones (lo que parece ser el comportamiento previsto), pero eso incluye que el servidor se autocalifique usando demasiada memoria, haciendo que la solicitud se ejecute demasiado tiempo, etc. –
I Entiendo las desventajas, pero creo que vale la pena. La aplicación se reinicia restablecer sesiones: aceptable. Demasiada memoria o demasiado tiempo de una solicitud? En unicornio, estas situaciones solo deberían ocurrir en un proceso de trabajo. Y como configuré 'preload_app = true', la inicialización solo ocurre en el maestro. Entonces, unicornio puede reaparecer a los trabajadores sin causar una reinicialización. – sbutler
Posible duplicado de [los inicializadores de Rails 3 que se ejecutan solo en \ 'rails server \' y no \ 'rails generate \ ', etc] (http://stackoverflow.com/questions/8660019/rails-3-initializers-that- run-only-on-rails-server-and-not-rails-generate-e) – davmac