Come posso configurare Apache con FastCGI e Ruby?


9

Ho letto molti post sul forum, tutorial, ecc., Su come configurare apache su Linux con fastcgi. Sto cercando di eseguire fcgi per alcuni dei miei sviluppi rubini (non rotaie), ma immagino che dovrebbe applicarsi a qualsiasi lingua. Nota che ho già apache, fastcgi, ruby-fcgi e simili già installati sulla mia web box.

Concettualmente, mi sto divertendo. Apache genera i processi fcgi specificati secondo necessità? Li avvio lungo l'apache laterale? Fondamentalmente, sto cercando di arrivare a un punto in cui sono in grado di porre le domande giuste, quindi mi scuso se il titolo è fuorviante.

Risposte:


9

Bene, nel frattempo, l'ho capito. Dal momento che non è stato scritto in modo conciso su questo argomento, ecco l'inizio di uno. Quando avrò risolto tutti i bug, lo invierò ad alcuni siti tutorial.

  1. Assicurarsi che sia installato il modulo apache fastcgi di base. Se usi ArchLinux come faccio io, mod_fcgid su aur funziona. In altre distribuzioni, installare mod_fcgid o mod_fastcgi. (Per coloro che si chiedono la differenza, non penso che ci sia molto, quindi ho scelto quello con più attività.)

  2. Nel tuo file httpd.conf, attiva il modulo aggiungendo una riga all'inizio delle definizioni LoadModule. Non sono sicuro se sia importante quali distribuzioni, ma su Arch lo eraLoadmodule fcgid_module modules/mod_fcgid.so

  3. Aggiungi una nuova sezione al tuo httpd.conf. L'ho messo appena sotto la sezione cgid_module, ma sono abbastanza sicuro che la posizione sarebbe arbitraria.

    <IfModule fcgid_module>
      AddHandler fcgid-script .fgci
    </IfModule>
    
  4. Ora dalla mia comprensione, qualsiasi file con l'estensione .fcgi in una directory contrassegnata ExecCGI sarà ora gestito dal modulo fastcgi che è stato installato. Ho installato questo pacchetto per fornire a Ruby i collegamenti fastcgi, all'interno di una directory ExecCGI, ho scritto questo script di provatest.rb.fcgi

    #!/usr/bin/ruby -w
    require 'fcgi'
    
    count = 0
    FCGI.each_cgi do
      puts "Content-type: text/html\n\n"
      puts "Hello, Ruby! FastCGI(#{count})"
      count = count + 1
    end
    

Ora quando vai a quella pagina nel tuo browser, poiché countè al di fuori del ciclo fastcgi, dovrebbe aumentare con ogni visualizzazione di pagina. In tal caso, fcgi è configurato correttamente.


1
Argh. markdown mi sta dando dei veri problemi con questo post.
sdellysse,

Il codice è stato incorporato in un elenco, quindi il rientro di 4 spazi non è sufficiente. L'ho fatto funzionare con 8 spazi.
Augustin

1
Interessante. Quindi, allora si potrebbero gestire file .rb puliti con una <Directory>direttiva in un <VirtualHost>contesto, diciamo - AddHandler fcgi-script .rbe FCGIWrapper /path/to/ruby .rb(per rimuovere il requisito hashbang per gli script web). E forse Options ExecCGI. Potrebbe provarci.
Benji XVI,

in ArchLinux, 'mod_fcgid' è ora disponibile in extra, al di fuori di AUR
Aaron Thomas

1

È necessario esaminare l'utilizzo di Passenger per gestire l'applicazione delle rotaie (anche se non si utilizzano funzioni di rotaie come ActiveRecord ecc.). Ci sono molti siti Web in esecuzione su di esso (inoltre hanno Rails Enterprise, meno memoria, prestazioni migliori)


Come specificato nella domanda, non sto usando le rotaie. Ma grazie in entrambi i casi.
sdellysse,

1
Per la cronaca: Phusion Passenger non esegue solo applicazioni Rails. Supporta anche Rack. Pertanto, se l'applicazione Web utilizza Rack, puoi provare a distribuirla con Phusion Passenger.
joschi

1

Apache genera i processi fcgi specificati secondo necessità? Li avvio lungo l'apache laterale?

Apache li genererà per te. Puoi impostare un numero minimo e massimo di processi da generare nel tuo httpd.conf e genererà nuovi processi e ucciderà quelli non aggiornati in base al volume delle richieste in arrivo. Finché hai richieste in arrivo, il tuo processo continuerà a funzionare.


0

Apache dovrebbe generarli usando l'interfaccia fastcgi. Li lascerà comunque in esecuzione per un po 'di tempo, e ogni processo dovrebbe gestire più di una richiesta prima che venga terminata da Apache.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.