La mia webapp deve crittografare i suoi dati di sessione. Quello che ho impostato è:Rails 3.1: come eseguire un inizializzatore solo per l'app Web (server di rails/unicorno/ecc.)
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
Che tutto funzioni alla grande e mantiene i dati della sessione protetti. Ecco il problema: quando eseguo le mie attività personalizzate di rake carica l'inizializzatore e cancella tutte le sessioni. Non bene!
Cosa posso inserire nel mio inizializzatore per assicurarsi che venga eseguito SOLO per l'inizializzazione dell'app Web? Oppure, cosa posso inserire nel mio inizializzatore per far sì che NON venga eseguito per le attività di rake?
Aggiornamento: OK, quello che ho fatto per il momento è aggiungere MYAPP_IN_RAKE = true unless defined? MYAPP_IN_RAKE
al mio file .rake. E poi nel mio inizializzatore:
unless defined?(MYAPP_IN_RAKE) && MYAPP_IN_RAKE
# Web only initialization
end
Sembra funzionare. Ma sono aperto ad altri suggerimenti.
Questo sembra suscettibile di mordere in altri modi in futuro. Ogni volta che il server viene riavviato, perderai tutte le tue sessioni (il che sembra essere il comportamento previsto), ma ciò include il server che sta eseguendo l'auto-auto utilizzando troppa memoria, una richiesta eseguita troppo a lungo, ecc. –
I capire gli aspetti negativi, ma penso che ne valga la pena. App riavviate le sessioni di ripristino: accettabile. Troppa memoria o troppo lunga di una richiesta? Sotto unicorno queste situazioni dovrebbero accadere solo in un processo di lavoro. E poiché ho impostato 'preload_app = true', l'inizializzazione avviene solo nel master. Quindi l'unicorno può rigenerare i lavoratori senza causare una reinizializzazione. – sbutler
Possibile duplicato di [inizializzatori Rails 3 eseguiti solo su \ 'rails server \' e non \ 'rails generate \, ecc.] (Http://stackoverflow.com/questions/8660019/rails-3-initializers-that- run-only-on-rails-server-and-not-rails-generate-e) – davmac