Làm cách nào để thiết lập Apache với FastCGI và Ruby?


9

Tôi đã đọc rất nhiều bài viết trên diễn đàn, hướng dẫn, v.v., về việc thiết lập apache trong linux với fastcgi. Tôi đang cố gắng chạy fcgi cho một số phát triển ruby ​​của tôi (không phải đường ray), nhưng tôi cho rằng nó nên áp dụng cho bất kỳ ngôn ngữ nào. Xin lưu ý rằng tôi đã có apache, fastcgi, ruby-fcgi và những thứ tương tự đã được cài đặt trên hộp web của tôi.

Về mặt khái niệm, tôi đang có một thời gian khó khăn với nó. Apache có sinh ra các quy trình fcgi được chỉ định khi cần không? Tôi có bắt đầu chúng cùng với apache không? Về cơ bản, tôi đang cố gắng đến một điểm mà tôi có thể hỏi những câu hỏi thích hợp, vì vậy xin lỗi nếu tiêu đề bị sai lệch.

Câu trả lời:


9

Chà, trong lúc này, tôi đã tìm ra cái này. Vì không có bài viết ngắn gọn về chủ đề này, đây là sự khởi đầu của một. Khi tôi có tất cả các lỗi được giải quyết, tôi sẽ gửi nó đến một số trang web hướng dẫn.

  1. Hãy chắc chắn rằng mô-đun apache cơ sở fastcgi được cài đặt. Nếu bạn sử dụng ArchLinux như tôi, mod_fcgid trên aur hoạt động. Trong các bản phân phối khác, cài đặt mod_fcgid hoặc mod_fastcgi. (Đối với những người thắc mắc về sự khác biệt, tôi không nghĩ có nhiều, vì vậy tôi đã tìm kiếm một hoạt động có nhiều hoạt động hơn.)

  2. Trong tệp httpd.conf của bạn, kích hoạt mô-đun bằng cách thêm một dòng vào đầu định nghĩa LoadModule của bạn. Không chắc nó có phân phối gì không, nhưng trên Arch thì đó làLoadmodule fcgid_module modules/mod_fcgid.so

  3. Thêm một phần mới vào httpd.conf của bạn. Tôi đặt cái này ngay dưới phần cgid_module, nhưng tôi khá chắc chắn vị trí sẽ tùy ý.

    <IfModule fcgid_module>
      AddHandler fcgid-script .fgci
    </IfModule>
    
  4. Theo hiểu biết của tôi, bất kỳ tệp nào có phần mở rộng .fcgi trong thư mục được đánh dấu ExecCGI sẽ được xử lý bởi mô-đun fastcgi đã được cài đặt. Tôi đã cài đặt gói này để cung cấp cho Ruby các ràng buộc fastcgi, bên trong một thư mục ExecCGI, tôi đã viết kịch bản thử nghiệm nàytest.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
    

Bây giờ khi bạn truy cập trang đó trong trình duyệt của mình, vì countnằm ngoài vòng lặp fastcgi, nó sẽ tăng lên với mỗi lượt xem trang. Nếu đó là như vậy, fcgi được thiết lập chính xác.


1
argh markdown đang cho tôi một số rắc rối thực sự với bài viết này.
sdellysse

Mã của bạn đã được nhúng trong một danh sách, vì vậy thụt 4 khoảng trắng là không đủ. Tôi đã làm cho nó hoạt động với 8 không gian.
augustin

1
Hấp dẫn. Vì vậy, sau đó người ta có thể xử lý các tệp .rb gọn gàng bằng một lệnh <Directory>trong <VirtualHost>ngữ cảnh, giả sử - AddHandler fcgi-script .rbFCGIWrapper /path/to/ruby .rb(để loại bỏ yêu cầu hashbang cho các tập lệnh web). Và có lẽ Options ExecCGI. Có thể cho điều này một shot.
Benji XVI

trong ArchLinux, 'mod_fcgid' hiện có sẵn trong các tính năng bổ sung, bên ngoài AUR
Aaron Thomas

1

Bạn nên xem xét việc sử dụng Hành khách để xử lý ứng dụng đường ray của mình (ngay cả khi bạn không sử dụng bất kỳ tính năng đường ray nào như ActiveRecord, v.v.). Có nhiều trang web đang chạy trên đó (cộng với họ có Rails Enterprise, ít bộ nhớ hơn, hiệu suất tốt hơn)


Như được chỉ định trong câu hỏi, tôi không sử dụng đường ray. Nhưng cảm ơn bạn bằng một trong hai cách.
sdellysse

1
Đối với bản ghi: Phusion Pasbah không chỉ chạy các ứng dụng Rails. Nó cũng hỗ trợ Rack. Vì vậy, nếu ứng dụng web của bạn đang sử dụng Rack, bạn có thể thử triển khai nó với Phusion Pasbah.
joschi

1

Apache có sinh ra các quy trình fcgi được chỉ định khi cần không? Tôi có bắt đầu chúng cùng với apache không?

Apache sẽ sinh ra chúng cho bạn. Bạn có thể đặt số lượng quy trình tối thiểu và tối đa để sinh ra trong httpd.conf của mình và nó sẽ sinh ra các quy trình mới và tiêu diệt các quy trình cũ dựa trên khối lượng yêu cầu đến. Miễn là bạn có yêu cầu đến, quy trình của bạn sẽ tiếp tục chạy.


0

Apache nên sinh ra chúng bằng giao diện fastcgi. Tuy nhiên, nó sẽ khiến họ chạy một thời gian và mỗi quy trình dự kiến ​​sẽ xử lý nhiều hơn một yêu cầu trước khi nó bị chấm dứt bởi Apache.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.