2015-05-29 5 views
15

Desidero distribuire la mia applicazione Rails per Heroku utilizzando Puma webserver. Tuttavia, non sono sicuro che tutte le gemme siano truccate. Leggere il codice sorgente di tutte le gemme non è un'opzione fattibile per noi.Come controllare la sicurezza dei thread di applicazione Rails per Puma

C'è un modo per controllare automaticamente tutte le gemme per la sicurezza dei thread? O Puma si lamenta/visualizza un log degli errori specifico se il codice non sicuro del thread è stato eseguito/rilevato?

+2

FWIW sicurezza Discussione in rubino è incerto al meglio. Questo è uno dei motivi per cui Jose ha creato l'Elisir. Non conterei sulla sicurezza del filo in alcun codice rubino. La cosa migliore è l'uso Rubinius o JRuby – engineerDave

risposta

1

sicurezza Il filo non può essere rilevato in generale. Se ci fosse un modo per rilevarlo automaticamente, probabilmente il tuo compilatore/interprete ti avvertirebbe a riguardo. Race conditions non può essere rilevato dai sistemi automatici, possono essere anche difficili da riprodurre.

A seconda del vostro interprete:

  • CRuby ha GIL, in modo da utilizzare con Puma è inutile.
  • Se si utilizza JRuby o Rubinius di quanto si possa probabilmente beneficiare da Puma e molto probabilmente le gemme che si utilizzano hanno documentato i loro metodi/classi thread-safety. In questo caso, tutto ciò che ti serve è controllare il tuo codice.
+0

La GIL non significa che non è possibile scrivere codice non sicuro infilare –

+0

"Un interprete che usa GIL sarà sempre consentono esattamente un thread per eseguire in un momento, anche se eseguito su un multi- core processor "=> fino a quando la memoria è condivisa, non è ancora possibile che si verifichino deadlock, condizioni di gara, problemi di liveness? –

+0

OK, hai ragione su questo. Il GIL semplifica la maggior parte dei possibili problemi di threading che possono verificarsi. Hai ragione, il punto principale è che non puoi testare il codice per la sicurezza dei thread in qualche modo automatico e usare 'Puma' per un'implementazione di Ruby con GIL non avere benefici sull'uso di' Unicorn' per esempio. – hakcho

Problemi correlati