Как мне установить Apache с FastCGI и Ruby?

9

Я читал много постов на форуме, учебных пособий и т. Д. О настройке apache под linux с помощью fastcgi. Я пытаюсь запустить fcgi для некоторых моих разработок ruby ​​(не rails), но я думаю, что это должно относиться к любому языку. Обратите внимание, что у меня уже есть apache, fastcgi, ruby-fcgi и т.п., уже установленные на моем веб-боксе.

Концептуально мне тяжело с этим. Apache порождает указанные процессы fcgi по мере необходимости? Должен ли я начать их вдоль стороны Apache? По сути, я пытаюсь добраться до точки, где я могу задавать правильные вопросы, поэтому извиняюсь, если название вводит в заблуждение.

sdellysse
источник

Ответы:

9

Ну, а пока я понял это. Поскольку не было краткой рецензии на эту тему, вот начало. Когда я исправлю все ошибки, я отправлю это на некоторые учебные сайты.

  1. Убедитесь, что установлен базовый модуль apc fastcgi. Если вы используете ArchLinux, как я, mod_fcgid на aur работает. В других дистрибутивах установите либо mod_fcgid, либо mod_fastcgi. (Для тех, кто интересуется разницей, я не думаю, что есть много, поэтому я выбрал ту, которая более активна.)

  2. В файле httpd.conf активируйте модуль, добавив строку в начало ваших определений LoadModule. Не уверен, имеет ли значение какое распределение, но на Arch это былоLoadmodule fcgid_module modules/mod_fcgid.so

  3. Добавьте новый раздел в ваш httpd.conf. Я поместил это прямо в раздел cgid_module, но я уверен, что местоположение будет произвольным.

    <IfModule fcgid_module>
      AddHandler fcgid-script .fgci
    </IfModule>
    
  4. Теперь, насколько я понимаю, любой файл с расширением .fcgi в каталоге, помеченном как ExecCGI, теперь будет обрабатываться установленным модулем fastcgi. Я установил этот пакет, чтобы дать Ruby привязки fastcgi, внутри каталога ExecCGI, я написал этот тестовый скриптtest.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
    

Теперь, когда вы переходите на эту страницу в вашем браузере, поскольку она countнаходится вне цикла fastcgi, она должна увеличиваться с каждым просмотром страницы. Если это так, fcgi настроен правильно.

sdellysse
источник
1
Argh. Уценка доставляет мне настоящие проблемы с этим постом.
sdellysse
Ваш код был встроен в список, поэтому отступа в 4 пробела недостаточно. Я сделал это работать с 8 пробелами.
Августин
1
Интересно. Таким образом, тогда можно обрабатывать аккуратные файлы .rb с помощью <Directory>директивы в <VirtualHost>контексте, скажем - AddHandler fcgi-script .rbи FCGIWrapper /path/to/ruby .rb(чтобы удалить требование hashbang для веб-скриптов). И возможно Options ExecCGI. Мог бы дать этому шанс.
Бенджи XVI
в ArchLinux 'mod_fcgid' теперь доступен в дополнениях за пределами AUR
Аарон Томас
1

Вам следует изучить использование Passenger для работы с приложением rails (даже если вы не используете какие-либо функции rails, такие как ActiveRecord и т. Д.). На нем работает много сайтов (плюс у них есть Rails Enterprise, меньше памяти, лучшая производительность)

Zepplock
источник
Как указано в вопросе, я не использую рельсы. Но спасибо в любом случае.
sdellysse
1
Для справки: Phusion Passenger не только запускает приложения Rails. Он также поддерживает Rack. Поэтому, если ваше веб-приложение использует Rack, вы можете попробовать развернуть его с помощью Phusion Passenger.
Йоси
1

Apache порождает указанные процессы fcgi по мере необходимости? Должен ли я начать их вдоль стороны Apache?

Apache породит их для вас. Вы можете установить минимальное и максимальное количество процессов, которые будут появляться в вашем httpd.conf, и оно будет вызывать новые и уничтожать устаревшие в зависимости от объема входящих запросов. Пока у вас есть поступающие запросы, ваш процесс будет продолжаться.

user44700
источник
0

Apache должен порождать их, используя интерфейс fastcgi. Тем не менее, он будет работать в течение некоторого времени, и ожидается, что каждый процесс обработает более одного запроса до его завершения Apache.

Майкл Графф
источник