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定義の先頭に1行追加してモジュールを有効化します。ディストリビューションによって影響があるかどうかはわかりませんが、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
    

ブラウザでそのページにアクセスすると、 はcountfastcgi ループの外側にあるため、ページを表示するたびに増加するはずです。その場合、fcgi は正しくセットアップされています。

答え2

使用を検討してください乗客Rails アプリケーションを処理する (ActiveRecord などの Rails 機能を使用していない場合でも)。多くの Web サイトがこれを使用して実行されています (さらに、Rails Enterprise が搭載されているため、メモリが少なく、パフォーマンスが向上します)

答え3

Apache は fastcgi インターフェースを使用してこれらを生成する必要があります。ただし、これらはしばらく実行されたままになり、各プロセスは Apache によって終了されるまでに複数のリクエストを処理することが予想されます。

答え4

Apache は必要に応じて指定された fcgi プロセスを生成しますか? それらを Apache と並行して起動しますか?

Apache がプロセスを生成します。生成するプロセスの最小数と最大数を httpd.conf で設定すると、受信リクエストの量に基づいて新しいプロセスが生成され、古いプロセスが強制終了されます。リクエストが受信されている限り、プロセスは実行され続けます。

関連情報