如何使用FastCGI和Ruby设置Apache?


9

我一直在阅读许多论坛文章,教程等,有关使用fastcgi在Linux下设置apache。我正在尝试为我的某些ruby开发(而不是rails)运行fcgi,但我认为它应该适用于任何语言。请注意,我的Web箱中已经安装了apache,fastcgi,ruby-fcgi等。

从概念上讲,我很难过。apache是​​否会根据需要生成指定的fcgi进程?我会从侧面开始吗?基本上,我试图达到能够提出适当问题的地步,因此,如果标题误导您,我们深表歉意。

Answers:


9

好吧,与此同时,我想出了这一点。由于没有关于该主题的简明文章,因此这是一个开始。解决所有错误后,我将其提交给一些教程站点。

  1. 确保已安装基本的fastcgi apache模块。如果像我一样使用ArchLinux,则aur上的mod_fcgid可以工作。在其他发行版中,安装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. 现在,根据我的理解,目录中标记为ExecCGI的任何带有.fcgi扩展名的文件都将由已安装的fastcgi模块处理。我安装了软件包,以便在ExecCGI目录中为Ruby提供fastcgi绑定,我编写了此测试脚本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设置正确。


1
啊 markdown给我这个帖子带来了一些麻烦。
sdellysse,2010年

您的代码已嵌入列表中,因此4个空格的缩进是不够的。我让它有8个空格。
奥古斯丁

1
有趣。这样一来,便可以<Directory><VirtualHost>上下文中使用指令处理整洁的.rb文件,例如– AddHandler fcgi-script .rbFCGIWrapper /path/to/ruby .rb(以消除Web脚本的hashbang要求)。也许吧Options ExecCGI。可以试一下。
Benji XVI

在ArchLinux中,'mod_fcgid'现在在AUR之外的其他版本中可用
Aaron Thomas

1

您应该考虑使用Passenger处理Rails应用程序(即使您没有使用ActiveRecord等任何Rails功能)。它上运行着许多网站(此外,它们还有Rails Enterprise,更少的内存,更好的性能)


如问题中所指定的,我没有使用rails。但是,无论哪种方式,谢谢你。
sdellysse,2010年

1
记录:Phusion Passenger不仅运行Rails应用程序。它也支持机架。因此,如果您的Web应用程序正在使用Rack,则可以尝试与Phusion Passenger一起部署它。
joschi 2010年

1

apache是​​否会根据需要生成指定的fcgi进程?我会从侧面开始吗?

Apache将为您生成它们。您可以在httpd.conf中设置要生成的最小和最大进程数,它会生成新进程并根据传入请求的数量杀死过时的进程。只要有请求传入,您的进程就会继续运行。


0

Apache应该使用fastcgi接口生成它们。但是,它将使它们运行一段时间,并且在由Apache终止之前,每个进程应处理多个请求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.