如何用FastCGI和Ruby设置Apache?

我一直在阅读很多论坛post,教程等,关于在Linux下用fastcgi设置Apache。 我试图运行fcgi的一些我的ruby开发(不轨),但我觉得它应该适用于任何语言。 请注意,我已经安装了apache,fastcgi,ruby-fcgi等等。

从概念上讲,我很难过。 apache是​​否根据需要产生指定的fcgi进程? 我是否一边开始他们的Apache? 基本上,我正试图让我能够提出正确的问题,如果标题是误导性的,请道歉。

那么,在此期间,我想出了这一个。 由于这方面没有简明的文字,所以这是一个开始。 当我把所有的错误都解决了的时候,我会把它提交给一些教程网站。

  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模块处理。 我安装了这个包来给Ruby提供fastcgi绑定,里面有一个ExecCGI目录,我写了这个testing脚本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设置正确。

你应该考虑使用Passenger来处理你的rails应用程序(即使你没有使用像ActiveRecord这样的railsfunction)。 有很多网站上运行(加上他们有Rails企业,更less的内存,更好的性能)

apache是​​否根据需要产生指定的fcgi进程? 我是否一边开始他们的Apache?

Apache会为你产卵。 你可以设置在你的httpd.conf中产生的最小和最大进程数,它会产生新的进程,并根据传入的请求的数量杀掉过期的进程。 只要你有请求进来,你的过程将继续运行。

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