18 votes

Configuration de Ruby CGI dans Apache

Je veux utiliser Ruby dans Apache via CGI. J'ai ce qui suit dans mon fichier de configuration :

DocumentRoot /home/ceriak/ruby

<Directory /home/ceriak/ruby>
    Options +ExecCGI
    AddHandler cgi-script .rb
</Directory>

test.rb est un fichier de test placé sous /home/ceriak/ruby/ , #!/usr/bin/ruby inclus sur la première ligne et ayant les droits d'exécution. Pourtant, lorsque je visite localhost/test.rb J'obtiens une fenêtre de téléchargement et je peux obtenir le code source.

Il est intéressant de noter que lorsque je place le même script sous la rubrique /usr/lib/cgi-bin/ et appeler localhost/cgi-bin/test.rb il fonctionne comme prévu.

(Apache2 sur Ubuntu 9.10.)

Une idée ?

7voto

robbrit Points 7531

Quelques éléments à vérifier :

  • Votre fichier est-il exécutable ? Vous pouvez le rendre exécutable en allant chmod +x /path/to/file
  • Avez-vous affiché le bon type de contenu ?
  • Y a-t-il un saut de ligne vide entre vos en-têtes et votre sortie ?
  • Avez-vous redémarré Apache après avoir défini la configuration ?

Si vous avez fait tout cela, ça devrait fonctionner correctement. J'ai ceci comme fichier test.rb :

#!/usr/bin/env ruby

puts <<EOS
Content-type: text/html

<html><body>hi</body></html>
EOS

1voto

jayant Points 2009

J'ai rencontré la même situation et j'ai pu la résoudre en ajoutant la ligne suivante après AddHandler :

Require all granted

1voto

Matt Points 1692

Vérifiez que mod_cgi est activé ; le http.conf par défaut de Yosemite le désactive.

1voto

DaveGauer Points 566

Pour résumer tous les bons conseils donnés dans ces réponses et dans votre question elle-même (j'ai dû faire chacune de ces choses puisque je partais d'une page blanche) :

httpd.conf

Configurer le répertoire CGI avec :

  • En +ExecCGI option
  • Un contrôle d'accès qui autorise les visiteurs que vous souhaitez ( Require all granted par exemple)
  • Définir un gestionnaire pour les scripts CGI avec AddHandler ou SetHandler (voir note ci-dessous)

Exemple :

<Directory /home/ceriak/ruby>
    Options +ExecCGI
    AddHandler cgi-script .rb
    Require all granted
</Directory>

Note : pour utiliser les CGI sans avoir à utiliser une extension de fichier spécifique telle que .rb vous pouvez utiliser SetHandler à la place :

SetHandler cgi-script

Maintenant, tout ce qui se trouve dans le répertoire sera traité comme un CGI script, ce qui est probablement ce que vous voulez de toute façon et vous pouvez laisser les extensions désactivées, ce qui peut paraître plus joli et/ou ne pas informer les visiteurs de la technologie sous-jacente : http://example.com/test

Enfin, vérifiez que mod_cgi est activé (où ${modpath} est correcte pour votre système) :

LoadModule cgi_module ${modpath}/mod_cgi.so

N'oubliez pas de redémarrer Apache après avoir effectué vos modifications. Sur Slackware, par exemple, nous faisons cela :

$ sudo /etc/rc.d/rc.httpd restart

Le script

N'oubliez pas le "she-bang" ( #! ) pour exécuter le script avec l'interpréteur Ruby.

Sortie a Content-type , un saut de ligne, puis le corps de votre réponse :

#!/usr/bin/env ruby

puts "Content-type: text/html"
puts
puts "<html><body>Hello World!</body></html>"

Assurez-vous que le fichier est exécutable (par Apache !):

$ chmod +x /home/ceriak/ruby/test.rb

Ces deux documents Apache sont très utiles :

https://httpd.apache.org/docs/2.4/howto/cgi.html

https://httpd.apache.org/docs/current/mod/mod_cgi.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X