Devo eseguire determinate inizializzazioni a seconda del server Web utilizzato per avviare l'applicazione. È possibile rilevarlo a livello di codice dall'inizializzatore di rotaie?Come rilevare quale server (thin, puma, passeggero, ...) viene utilizzato per l'applicazione Rails?
Come rilevare quale server (thin, puma, passeggero, ...) viene utilizzato per l'applicazione Rails?
risposta
Anche se non è così pulito, è possibile utilizzare
defined?(::Thin)
defined?(::Unicorn)
defined?(::Passanger)
e così via. Questo funzionerà per questi tre, e devi controllare se funziona con gli altri.
Purtroppo questo non è molto affidabile. Posso avere gemma sottile inclusa in Gemfile, ma l'applicazione può essere avviata tramite il modulo Passenger in nginx –
Questo è vero. Aspettiamo altre risposte, se ce ne sono. –
Vedere questa risposta sul dispatcher di NewRelic http://stackoverflow.com/a/12246652/391826 – jaygooby
Ecco una sorta di modo hacky per farlo (in config/application.rb
add):
module Rails
class Server < ::Rack::Server
alias_method :old_start, :start
def start
puts server.name # or set an ENV variable
old_start
end
end
end
Sfortunatamente, non funziona se il server viene avviato non tramite il comando 'rails server'. Nel mio caso, thin è avviato tramite 'thin start' e Passenger è un modulo nginx. –
ho appena finito per usare https://www.builtwith.com, dà tutti i dettagli che si desidera.
è possibile verificare se il processo è in esecuzione o non utilizzo di ps aux
ps aux | grep passenger
ps aux | grep puma
ps aux | grep unicorm
- 1. Come faccio ad avviare 'puma', automaticamente, quando eseguo `rails server` (come fa Thin)
- 2. Come rilevare quale runtime .NET viene utilizzato (MS vs Mono)?
- 3. WebRTC: Determina quale server TURN viene utilizzato in PeerConnection
- 4. Come sapere quale malloc viene utilizzato?
- 5. Determina quale endpoint wcf viene utilizzato sul server
- 6. Come monitorare un server puma?
- 7. Come ottenere Rails 4 ActionController :: Lo streaming live funziona con Thin e Ruby 2? E come scala Thin e Puma in scala con lo streaming live?
- 8. Passeggero: errore interno server
- 9. quale caricatore di classi viene utilizzato?
- 10. File bash di Ubuntu come trovare quale file viene utilizzato?
- 11. Quale funtore applicativo viene utilizzato per passare parametri condivisi?
- 12. Quale segmento viene utilizzato per impostazione predefinita nell'indirizzamento indiretto x86?
- 13. Con quale JVM Intellij Idea viene utilizzato per l'avvio?
- 14. Quale algoritmo di crittografia viene utilizzato in DPAPI per WP7?
- 15. Quale linguaggio di programmazione viene utilizzato per sviluppare Java?
- 16. Per cosa viene utilizzato @@ DEF_SORTORDER_ID?
- 17. Rails ignora config.action_dispatch.x_sendfile_header? Utilizzo di Thin + Nginx
- 18. Server ha inviato eventi, Puma, Rails e max thread dedicati per ciascun client
- 19. Come sapere quale motore di archiviazione viene utilizzato in mongodb?
- 20. Per cosa viene utilizzato?
- 21. Come avviare il thread del coniglio in Rails and Thin
- 22. Come modificare il server di rail predefinito in Rails 3?
- 23. mso - come viene utilizzato
- 24. Perché Puma è vincolante solo per tcp6? (via `rails s`)
- 25. Utilizzo di thin Web Server con HTTP e HTTPS
- 26. Configurazione NGINX per Rails 5 ActionCable con puma
- 27. Come verificare quale interprete Python viene utilizzato per eseguire gli script WSGI in apache2?
- 28. quello che viene utilizzato per attr_internal
- 29. Quale di questi è un'opzione migliore da utilizzare insieme all'applicazione "ultime rotaie"? Mongrel, Thin, WEBrick e Passenger
- 30. Punteggio Lucene: in quale contesto viene utilizzato queryNorm?
Perché avete bisogno di sapere che, che tipo di inizializzazione dipende dal tipo di server web? Dicci di più su ciò che vuoi ottenere, forse c'è un modo migliore. Mi sembra strano che un'applicazione dovrebbe essere responsabile della ricerca di tali informazioni. Penso che sia una buona idea passare queste informazioni all'app (via ENV per esempio). – spickermann
Sì, lo so che è un po 'strano ... E ho paura che sarà più strano se entrerò nei dettagli. Ma ... Esistono processi figli avviati dalla nostra app per rails (usiamo il web driver del selenio per fare screenshot sul lato server, che esegue il processo figlio di firefox). Il problema è che thin non uccide questi processi su stop/restart, ma lo fa il Passenger. Quindi mi piacerebbe chiudere firefox manualmente solo quando l'app funziona sottosopra. Anche se non so ancora come catturare l'evento di uscita perché il gestore di at_exit non viene richiamato al riavvio, solo all'arresto. –
In realtà, ho bisogno di un modo sicuro per chiudere tutti i processi figli dell'app rails quando viene arrestato/riavviato, non dipende da un particolare server web, ma è, probabilmente, un'altra domanda. –