如何使用 FastCGI 和 Ruby 设置 Apache?

如何使用 FastCGI 和 Ruby 设置 Apache?

我已经阅读了很多论坛帖子、教程等,关于在 Linux 下使用 fastcgi 设置 apache。我尝试为一些 ruby​​ 开发(不是 rails)运行 fcgi,但我认为它应该适用于任何语言。请注意,我的 web 框上已经安装了 apache、fastcgi、ruby-fcgi 等。

从概念上讲,我对此感到很困惑。apache 是否根据需要生成指定的 fcgi 进程?我是否要与 apache 一起启动它们?基本上,我试图达到能够提出正确问题的程度,因此如果标题具有误导性,请原谅。

答案1

好吧,与此同时,我搞清楚了这一点。由于没有关于这个主题的简明文章,这里是其中的开头。当我解决所有错误后,我会将其提交给一些教程网站。

  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 目录中,我写了这个测试脚本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 设置正确。

答案2

你应该考虑使用乘客处理您的 Rails 应用程序(即使您不使用任何 Rails 功能,如 ActiveRecord 等)。有许多网站在其上运行(而且它们有 Rails Enterprise,内存更少,性能更好)

答案3

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

答案4

apache 是否会根据需要生成指定的 fcgi 进程?我是否应该与 apache 一起启动它们?

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

相关内容