Domanda

Sto configurando un server web Apache2 con più applicazioni Web Ruby on Rails con Phusion Passenger. So che il passeggero genera processi Ruby per la gestione delle richieste. Ho le seguenti domande:

  • Se è necessario gestire più di una richiesta contemporaneamente, il passeggero genererà più processi o più thread (Ruby)? Come lo configuro così genera sempre processi a thread singolo?
  • Se ho due applicazioni Rails, immagina che una richiesta per l'app A passi al processo 1, quindi arriva la richiesta per l'app B. È possibile che anche il processo 1 gestisca questa richiesta? Quando e come è possibile? In altre parole, un processo è autorizzato a gestire le richieste per più applicazioni Rails?
  • Ho la stessa applicazione Rails esportata in più URL e più host virtuali (come http: // e https: //). Lo stesso processo sarà in grado di servire host virtuali diversi? (La risposta a questa sembra essere sì, ho impostato una variabile globale nel rispondere a una richiesta all'host virtuale A e sono stato in grado di recuperare il valore nell'host virtuale B.)
È stato utile?

Soluzione

In generale, Passenger genera nuovi processi biforcando un ApplicationSpawner, che ha il framework e il codice dell'applicazione precaricati in memoria, o un FrameworkSpawner, che ha solo il codice framework.

Il passeggero, per quanto ne so, non tratta i thread. Al contrario, quando il carico aumenta su un'applicazione, fork di ApplicationSpawner dell'applicazione e inizializza un'altra istanza. Quando il carico diminuisce, vengono eliminate una o più istanze dell'applicazione.

Se il Passeggero è configurato in un certo modo (credo scegliendo il metodo di spawn "intelligente"), creerà un FrameworkSpawner, che carica il codice delle rotaie, ma nessun codice dell'applicazione, che può quindi essere biforcato per caricare e applicazione che utilizza quella versione di Rails.

Quindi, per rispondere alle tue domande:

  • Le servirà in modo sequenziale, quindi genererà ulteriori processi se decide che il carico è abbastanza alto.

  • No. Un processo può appartenere a un'unica applicazione Rails.

  • Sono un po 'impreciso su questo, ma il tuo esperimento ha senso. Il passeggero dovrebbe essere abbastanza intelligente da capire che anche se è in esecuzione da diversi punti nella configurazione del server, stai parlando della stessa applicazione. Probabilmente si basa sul percorso del filesystem dell'applicazione.

EDIT: sono andato a leggere un po 'su questo. Ho scoperto che avevo principalmente ragione, ma i dettagli tecnici erano un po 'fuori. Consulta la Documentazione per i passeggeri

Altri suggerimenti

Sì, Burke ha ragione. In caso di terza domanda, Phusion Passenger riconosce le applicazioni in base al loro percorso radice dell'applicazione. Quindi, anche se hai due host virtuali, se entrambi puntano allo stesso DocumentRoot, Phusion Passenger penserà che siano la stessa app.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top