Назад | Перейти на главную страницу

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

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

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

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

  1. Убедитесь, что установлен базовый модуль apache 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 настроен правильно.

Создает ли apache указанные процессы fcgi по мере необходимости? Запустить их параллельно с apache?

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

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

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