Настройка Ruby CGI в Apache - PullRequest
       39

Настройка Ruby CGI в Apache

15 голосов
/ 11 февраля 2010

Я хочу использовать Ruby в Apache через CGI. В моем файле конфигурации есть следующее:

DocumentRoot /home/ceriak/ruby

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

test.rb - это тестовый файл, помещенный в /home/ceriak/ruby/, #!/usr/bin/ruby, включенный в первую строку и имеющий права доступа к исполняемому файлу. Тем не менее, когда я захожу на localhost/test.rb, я получаю окно загрузки и могу получить исходный код.

Интересно, что когда я помещаю тот же сценарий в /usr/lib/cgi-bin/ и вызываю localhost/cgi-bin/test.rb, он работает как положено.

(Apache2 в Ubuntu 9.10.)

Есть идеи?

Ответы [ 4 ]

7 голосов
/ 03 мая 2011

Несколько вещей для проверки:

  • - исполняемый файл?Вы можете сделать его исполняемым, набрав chmod +x /path/to/file
  • вы вывели правильный тип контента?
  • есть ли пустая новая строка между вашими заголовками и выводом?
  • сделалвы перезапускаете Apache после настройки конфигурации?

Если вы все это сделали, все должно работать нормально.У меня есть это как мой файл test.rb:

#!/usr/bin/env ruby

puts <<EOS
Content-type: text/html

<html><body>hi</body></html>
EOS
1 голос
/ 16 декабря 2014

Дважды проверьте, что mod_cgi включен; по умолчанию в Йосемитском http.conf он отключен.

1 голос
/ 16 октября 2014

Я столкнулся с той же ситуацией и смог исправить ее, добавив следующую строку после AddHandler:

Require all granted
0 голосов
/ 04 мая 2018

Подводя итог всем прекрасным советам в этих ответах и ​​самому вашему вопросу (я должен был сделать каждую из этих вещей, так как я начинал с чистого листа):

httpd.conf

Настройте каталог CGI с помощью:

  • Опция +ExecCGI
  • Контроль доступа, который позволяет посетителям, которых вы хотите (например, Require all granted)
  • Установить обработчик для сценариев CGI с помощью AddHandler или SetHandler (см. Примечание ниже)

Пример:

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

Примечание : чтобы использовать CGI без необходимости использовать конкретное расширение файла, например .rb, вместо него можно использовать SetHandler:

SetHandler cgi-script

Теперь все в каталоге будет обрабатываться как CGI-скрипт, который, вероятно, в любом случае вам нужен, и вы можете оставить расширения отключенными, что может выглядеть лучше и / или не информировать посетителей о базовой технологии: http://example.com/test

Наконец, убедитесь, что mod_cgi включено (где ${modpath} правильно для вашей системы):

LoadModule cgi_module ${modpath}/mod_cgi.so

Не забудьте перезапустить Apache после внесения изменений. На Slackware, например, мы делаем это:

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

Сценарий

Не забудьте о взрывах (#!) для запуска сценария с интерпретатором Ruby.

Выведите Content-type, символ новой строки, а затем текст вашего ответа:

#!/usr/bin/env ruby

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

Убедитесь, что файл является исполняемым (от Apache!):

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

Эти два документа Apache очень полезны:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...