Bagaimana cara mengatur Apache dengan FastCGI dan Ruby?

9

Saya sudah membaca banyak posting forum, tutorial, dll., Tentang pengaturan apache di linux dengan fastcgi. Saya mencoba menjalankan fcgi untuk beberapa pengembangan ruby ​​saya (bukan rails), tetapi saya pikir itu harus berlaku untuk bahasa apa pun. Harap dicatat bahwa saya sudah memiliki apache, fastcgi, ruby-fcgi, dan sejenisnya sudah diinstal pada kotak web saya.

Secara konseptual, saya mengalami kesulitan dengan itu. Apakah apache menelurkan proses fcgi yang ditentukan sesuai kebutuhan? Apakah saya memulai mereka di samping apache? Pada dasarnya, saya mencoba untuk sampai pada titik di mana saya dapat mengajukan pertanyaan yang tepat, jadi minta maaf jika judulnya menyesatkan.

sdellysse
sumber

Jawaban:

9

Nah, sementara itu, saya menemukan yang ini. Karena tidak ada tulisan singkat tentang hal ini, inilah awal dari semuanya. Ketika semua bug saya sudah diperbaiki saya akan mengirimkan ini ke beberapa situs tutorial.

  1. Pastikan modul apache fastcgi dasar telah diinstal. Jika Anda menggunakan ArchLinux seperti yang saya lakukan, mod_fcgid pada aur berfungsi. Di distribusi lain, instal mod_fcgid atau mod_fastcgi. (Bagi mereka yang bertanya-tanya perbedaannya, saya tidak berpikir ada banyak, jadi saya memilih yang memiliki lebih banyak aktivitas.)

  2. Di file httpd.conf Anda, aktifkan modul dengan menambahkan baris ke awal definisi LoadModule Anda. Tidak yakin apakah itu masalah distribusi mana, tapi di Arch ituLoadmodule fcgid_module modules/mod_fcgid.so

  3. Tambahkan bagian baru ke httpd.conf Anda. Saya meletakkan ini tepat di bawah bagian cgid_module, tapi saya cukup yakin lokasi akan berubah-ubah.

    <IfModule fcgid_module>
      AddHandler fcgid-script .fgci
    </IfModule>
    
  4. Sekarang dari pemahaman saya, file apa pun yang memiliki ekstensi .fcgi di direktori bertanda ExecCGI sekarang akan ditangani oleh modul fastcgi yang diinstal. Saya menginstal paket ini untuk memberi Ruby binding fastcgi, di dalam direktori ExecCGI, saya menulis skrip pengujian initest.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
    

Sekarang ketika Anda pergi ke halaman itu di browser Anda, karena countberada di luar loop fastcgi, itu harus bertambah dengan setiap tampilan halaman. Jika demikian, fcgi diatur dengan benar.

sdellysse
sumber
1
argh. penurunan harga memberi saya beberapa masalah nyata dengan posting ini.
sdellysse
Kode Anda disematkan dalam daftar, jadi indentasi 4 spasi tidak cukup. Saya membuatnya bekerja dengan 8 ruang.
augustin
1
Menarik. Jadi, maka seseorang dapat menangani file .rb dengan <Directory>direktif dalam <VirtualHost>konteks, katakan - AddHandler fcgi-script .rbdan FCGIWrapper /path/to/ruby .rb(untuk menghapus persyaratan hashbang untuk skrip web). Dan mungkin Options ExecCGI. Mungkin bisa mencobanya.
Benji XVI
di ArchLinux, 'mod_fcgid' sekarang tersedia dalam figuran, di luar AUR
Aaron Thomas
1

Anda harus melihat ke dalam menggunakan Penumpang untuk menangani aplikasi rel Anda (bahkan jika Anda tidak menggunakan fitur rel seperti ActiveRecord dll). Ada banyak situs web yang menjalankannya (ditambah mereka memiliki Rails Enterprise, lebih sedikit memori, kinerja lebih baik)

Zepplock
sumber
Seperti yang ditentukan dalam pertanyaan, saya tidak menggunakan rel. Tapi terima kasih juga.
sdellysse
1
Sebagai catatan: Penumpang Phusion tidak hanya menjalankan aplikasi Rails. Ini mendukung Rack juga. Jadi jika aplikasi web Anda menggunakan Rack, Anda dapat mencoba menggunakannya dengan Phusion Passenger.
joschi
1

Apakah apache menelurkan proses fcgi yang ditentukan sesuai kebutuhan? Apakah saya memulai mereka di samping apache?

Apache akan menelurkan mereka untuk Anda. Anda dapat menetapkan jumlah minimum dan maksimum proses untuk muncul di httpd.conf Anda, dan itu akan memunculkan yang baru dan membunuh yang basi berdasarkan volume permintaan yang masuk. Selama Anda memiliki permintaan masuk, proses Anda akan terus berjalan.

user44700
sumber
0

Apache harus memunculkan mereka menggunakan antarmuka fastcgi. Itu akan membuat mereka berjalan selama beberapa waktu, bagaimanapun, dan setiap proses diharapkan untuk menangani lebih dari satu permintaan sebelum diakhiri oleh Apache.

Michael Graff
sumber