Comment configurer Apache avec FastCGI et Ruby?

9

J'ai lu beaucoup de messages sur le forum, des tutoriels, etc., sur la configuration d'apache sous linux avec fastcgi. J'essaie d'exécuter fcgi pour certains de mes développements rubis (pas rails), mais je pense que cela devrait s'appliquer à n'importe quelle langue. Veuillez noter que j'ai déjà installé apache, fastcgi, ruby-fcgi, etc. sur ma boîte Web.

Conceptuellement, j'ai du mal avec ça. Apache génère-t-il les processus fcgi spécifiés selon les besoins? Est-ce que je les démarre le long d'apache latéral? Fondamentalement, j'essaie d'arriver à un point où je suis en mesure de poser les bonnes questions, donc je m'excuse si le titre est trompeur.

sdellysse
la source

Réponses:

9

Eh bien, en attendant, j'ai compris celui-ci. Puisqu'il n'y avait pas de résumé concis sur ce sujet, voici le début d'un. Une fois tous les bogues résolus, je les soumettrai à certains sites de didacticiels.

  1. Assurez-vous que le module apache fastcgi de base est installé. Si vous utilisez ArchLinux comme moi, mod_fcgid sur l'aur fonctionne. Dans d'autres distributions, installez soit mod_fcgid ou mod_fastcgi. (Pour ceux qui se demandent la différence, je ne pense pas qu'il y ait beaucoup, alors je suis allé pour celui avec plus d'activité.)

  2. Dans votre fichier httpd.conf, activez le module en ajoutant une ligne au début de vos définitions de LoadModule. Je ne sais pas si cela importe quelles distributions, mais sur Arch, c'étaitLoadmodule fcgid_module modules/mod_fcgid.so

  3. Ajoutez une nouvelle section à votre httpd.conf. Je mets cela juste sous la section cgid_module, mais je suis assez sûr que l'emplacement serait arbitraire.

    <IfModule fcgid_module>
      AddHandler fcgid-script .fgci
    </IfModule>
    
  4. Maintenant de ma compréhension, tout fichier ayant l'extension .fcgi dans un répertoire marqué ExecCGI sera désormais géré par le module fastcgi qui a été installé. J'ai installé ce paquet pour donner à Ruby les liaisons fastcgi, à l'intérieur d'un répertoire ExecCGI, j'ai écrit ce script de testtest.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
    

Maintenant, lorsque vous accédez à cette page dans votre navigateur, car countétant en dehors de la boucle fastcgi, il doit incrémenter chaque vue de page. Si tel est le cas, fcgi est correctement configuré.

sdellysse
la source
1
argh. le démarquage me donne vraiment du mal avec ce post.
sdellysse
Votre code a été intégré dans une liste, donc l'indentation de 4 espaces ne suffit pas. Je l'ai fait fonctionner avec 8 espaces.
augustin
1
Intéressant. Ainsi, alors on pourrait gérer des fichiers .rb soignés avec une <Directory>directive dans un <VirtualHost>contexte, disons - AddHandler fcgi-script .rbet FCGIWrapper /path/to/ruby .rb(pour supprimer l'exigence de hashbang pour les scripts web). Et peut-être Options ExecCGI. Pourrait donner un coup de feu à cela.
Benji XVI
dans ArchLinux, 'mod_fcgid' est maintenant disponible en extras, en dehors d'AUR
Aaron Thomas
1

Vous devriez envisager d'utiliser Passenger pour gérer votre application de rails (même si vous n'utilisez aucune fonctionnalité de rails comme ActiveRecord, etc.). Il existe de nombreux sites Web fonctionnant dessus (en plus, ils ont Rails Enterprise, moins de mémoire, de meilleures performances)

Zepplock
la source
Comme spécifié dans la question, je n'utilise pas de rails. Mais merci de toute façon.
sdellysse le
1
Pour mémoire: Phusion Passenger n'exécute pas seulement les applications Rails. Il prend également en charge Rack. Donc, si votre application Web utilise Rack, vous pouvez essayer de la déployer avec Phusion Passenger.
joschi
1

Apache génère-t-il les processus fcgi spécifiés selon les besoins? Est-ce que je les démarre le long d'apache latéral?

Apache les fera apparaître pour vous. Vous pouvez définir un nombre minimum et maximum de processus à générer dans votre httpd.conf, et il en créera de nouveaux et tuera ceux périmés en fonction du volume des demandes entrantes. Tant que vous recevez des demandes, votre processus continue de fonctionner.

user44700
la source
0

Apache devrait les générer à l'aide de l'interface fastcgi. Il les laissera cependant fonctionner pendant un certain temps, et chaque processus devrait traiter plus d'une demande avant d'être terminé par Apache.

Michael Graff
la source