Thứ năm, 20/02/2014 | 00:00 GMT+7

Cách triển khai ứng dụng web Ruby dựa trên Sinatra trên Ubuntu 13

Sinatra là một khuôn khổ ngắn gọn, không thích phô trương. Nó hoàn thành công việc mà không bắt buộc nhà phát triển phải làm gì. Khi nói đến việc sử dụng ứng dụng của bạn, được phát triển bằng công cụ nhỏ tuyệt vời này, cùng một logic áp dụng và bạn được chào đón với nhiều lựa chọn. Mỗi cách làm việc khá giống nhau: hoàn thành công việc mà không có những phức tạp không cần thiết .


Trong bài viết DigitalOcean này, sau hướng dẫn Ruby 2.1 & Sinatra trên Ubuntu 13 đầu tiên của ta , ta sẽ tìm hiểu một số cách khác nhau để đưa ứng dụng Sinatra của bạn ra khỏi hộp ẩn của nó và chia sẻ với mọi người [trên Ubuntu] bằng cách sử dụng khác (và thú vị ) các công nghệ và phương pháp.

Bảng chú giải


1. Triển khai ứng dụng


2. Server ứng dụng


  1. Phần mềm trung gian Rack
  2. Server ứng dụng hành khách Phusion
  3. Server ứng dụng Unicorn

3. Server HTTP / WWW


  1. Server Apache HTTP
  2. Server HTTP Nginx chạy như một Reverse Proxy phía trước

4. Cài đặt


  1. Sự kết hợp giữa Apache và Hành khách
  2. Sự kết hợp giữa Nginx và Unicorn

Lưu ý: Các ví dụ của bài viết này được xây dựng dựa trên bài viết đầu tiên của ta về Sinatra & Ruby 2.1.0 trên Ubuntu 13. Nếu bạn muốn tìm hiểu thêm về cách bắt đầu với khuôn khổ hoặc cách chuẩn bị hệ điều hành với Ruby 2.1.0 và Sinatra, hãy xem xét kiểm tra trước khi tiếp tục với phần này.

Triển khai ứng dụng


Triển khai một ứng dụng ( dù đó là trang web, API hay server ) thường nghĩa là cài đặt hệ thống từ đầu (hoặc từ ảnh chụp nhanh được chụp kịp thời), chuẩn bị bằng cách cập nhật mọi thứ, download các phụ thuộc, cài đặt cấu trúc file và các quyền sau đó cuối cùng là tải lên cơ sở mã của bạn hoặc download bằng trình quản lý kiểm soát nguồn (SCM) chẳng hạn như Git .

Tuân theo các khuyến khích thiết kế của Sinatra, ta sẽ cố gắng giữ mọi thứ đơn giản nhất có thể và sử dụng các phương pháp đã thử, đã kiểm tra và dễ sử dụng cho các ví dụ triển khai của ta tại đây. Ta sẽ làm việc với các công cụ có uy tín và tin cậy để xử lý công việc và tìm hiểu về sự khác biệt của chúng.

Server ứng dụng


Thuật ngữ “ server ứng dụng” áp dụng cho các ứng dụng (tức là server ), mà (thường) chứa một ứng dụng khác (ví dụ: ứng dụng web của bạn) và tuân theo các thông số kỹ thuật và giao diện nhất định (tức là một ngôn ngữ chung), cho phép ứng dụng được chứa trong đó giao tiếp với bên ngoài thế giới.

, các công cụ này thường hướng đến việc xử lý logic nghiệp vụ (thực hiện các thủ tục) một mình và không dành cho các hoạt động HTTP / WWW khác như gửi hoặc nhận nội dung file tĩnh, xử lý nhiều client hoặc cạnh tranh với các kết nối lâu dài - mặc dù, cảm ơn cho nhiều thư viện sẵn có, cũng có sẵn các server ứng dụng như vậy.

Trong hầu hết các cài đặt , một hoặc nhiều server ứng dụng (ví dụ: Passenger, Unicorn, Puma, Thin, v.v.) được đặt sau một server HTTP / WWW thích hợp (ví dụ: Nginx, Apache, v.v.), có nhiệm vụ xử lý và xử lý tất cả các kết nối đến đầu tiên, trước khi chuyển nó sang cấp độ tiếp theo. Điều này cho phép việc phân phát nội dung (ví dụ: file javascript, hình ảnh, v.v.) cực kỳ hiệu quả, đồng thời tận dụng tối đa khả năng của cả hai ứng dụng và giữ cho khách hàng luôn trực tuyến (tức là không làm rơi kết nối) và xử lý các yêu cầu trong lớp ứng dụng .

Lưu ý: Để tìm hiểu về các server ứng dụng web Ruby khác nhau và hiểu Rack là gì, hãy xem bài viết So sánh các Server Web (Rack) dành cho Ứng dụng Web Ruby của ta .

Phần mềm trung gian Rack


Phần mềm trung gian Rack, triển khai đặc tả Rack , hoạt động bằng cách chia các yêu cầu HTTP đến thành các giai đoạn liên kết khác nhau và xử lý chúng theo từng phần cho đến khi nó gửi lại phản hồi đến từ ứng dụng web của bạn (bộ điều khiển). Nó có hai thành phần riêng biệt, Trình xử Bộ điều hợp , được sử dụng để giao tiếp với các web server và ứng dụng (khuôn khổ) tương ứng.

Liên quan đến các khung công tác dựa trên Ruby, các server ứng dụng web thực hiện công việc của chúng bằng cách triển khai đặc tả / giao diện Rack và kết nối với ứng dụng của bạn thông qua file config.ru , gọi (và nhập) ứng dụng của bạn dưới dạng một đối tượng.

Server ứng dụng hành khách Phusion


Passenger là một sản phẩm hoàn thiện, giàu tính năng, nhằm đáp ứng các nhu cầu cần thiết và các lĩnh vực triển khai ứng dụng đồng thời đơn giản hóa đáng kể các thủ tục cài đặt và bắt đầu. Nó loại bỏ kiến trúc người trung gian truyền thống bằng cách tích hợp trực tiếp với Reverse Proxy Nginx (và Apache).

Công cụ rất phổ biến này được dùng rộng rãi trong nhiều kịch bản production . Phiên bản open-souce của Passenger (chính là thứ ta sẽ sử dụng) có chế độ hoạt động đa quy trình đơn stream . Phiên bản Enterprise của nó có thể được cấu hình để hoạt động đơn stream hoặc đa stream , tùy thuộc vào nhu cầu của bạn.

Để tìm hiểu thêm về Hành khách, bạn có thể truy cập trang web chính thức của Hãng tại https://www.phusionpassenger.com/ .

Server ứng dụng Unicorn


Unicorn là một server ứng dụng web rất trưởng thành cho các ứng dụng web dựa trên Ruby / Rack. Nó có đầy đủ tính năng; tuy nhiên, nó phủ nhận bằng cách thiết kế cố gắng làm tất cả mọi thứ: Hiệu trưởng của Unicorn đang làm những gì cần được thực hiện bởi một server ứng dụng web và ủy thác phần còn lại của trách nhiệm (ví dụ: hệ điều hành).

Quy trình tổng thể của Unicorn tạo ra các công nhân, theo yêu cầu của bạn, để phục vụ các yêu cầu. Quá trình này cũng giám sát công nhân để ngăn chặn bộ nhớ và xử lý các vấn đề đáng kinh ngạc liên quan. Điều này nghĩa là đối với administrator hệ thống là nó sẽ giết một quy trình nếu (ví dụ) mất quá nhiều thời gian để hoàn thành một tác vụ hoặc sự cố bộ nhớ xảy ra.

Như đã đề cập ở trên, một trong những lĩnh vực mà Unicorn giao nhiệm vụ là sử dụng hệ điều hành để cân bằng tải. Điều này cho phép các yêu cầu không chồng chất lên các công nhân bận rộn được sinh ra.

Server HTTP / WWW


Server Apache HTTP


Apache là một server HTTP không thực sự cần bất kỳ giới thiệu nào vào thời điểm này. Nó đã là server HTTP phổ biến nhất thế giới và nó là một sản phẩm cực kỳ trưởng thành, giàu tính năng và có cấu hình cao, chạy và hoạt động cực kỳ tốt. Trong bài viết này, một trong những server mặt trước mà ta sẽ làm việc và sử dụng là Apache và ta sẽ xem cách nó tích hợp với server ứng dụng Phusion Passenger.

Server HTTP Nginx chạy như một Reverse Proxy phía trước


Nginx được thiết kế từ đầu để hoạt động như một server HTTP đa mục đích. Nó có khả năng phục vụ các file tĩnh (ví dụ: hình ảnh, file văn bản, v.v.) cực kỳ tốt, cân bằng kết nối và đối phó với một số nỗ lực khai thác nhất định. Nó hoạt động như điểm nhập đầu tiên của tất cả các yêu cầu và chuyển chúng cho Hành khách để ứng dụng web xử lý và trả lời phản hồi.

Nó là một web server / (ngược)-proxy có hiệu suất rất cao, tương đối dễ làm việc và dễ mở rộng (với các tiện ích bổ sung và trình cắm thêm).Nhờ kiến trúc của nó, Nginx có khả năng xử lý rất nhiều yêu cầu (hầu như không giới hạn), điều này - tùy thuộc vào ứng dụng hoặc tải trang web - có thể thực sự khó giải quyết bằng cách sử dụng một số lựa chọn thay thế cũ hơn khác.

Hãy nhớ: "Xử lý" các kết nối về mặt kỹ thuật nghĩa là không làm rơi chúng và có thể phục vụ chúng bằng một thứ gì đó. Bạn vẫn cần ứng dụng [ server ] và database của bạn hoạt động tốt để Nginx phục vụ phản hồi của khách hàng mà không phải là thông báo lỗi.

Để tìm hiểu thêm về Nginx, bạn có thể truy cập trang web chính thức của nó tại nginx.com .

Cài đặt


Sau khi quyết định kết hợp server nào bạn muốn làm việc, bước tiếp theo bao gồm thực sự cài đặt chúng và sẵn sàng trên server mà bạn muốn ứng dụng của bạn chạy.

Sự kết hợp giữa Apache và Hành khách


Lưu ý: Trước khi cài đặt Apache và Passenger, hãy đảm bảo tắt (hoặc gỡ bỏ) Nginx nếu bạn đã cài đặt nó; hoặc cấu hình nó để không chặn đường của Apache (tức là xung đột cổng / socket ).

Lưu ý: Nếu server của bạn có ít hơn 1 GB RAM, bạn cần thực hiện quy trình đơn giản dưới đây để chuẩn bị một không gian đĩa SWAP được sử dụng làm nơi chứa dữ liệu tạm thời (tức là bộ thay thế RAM) cho Hành khách . Vì server ảo DigitalOcean đi kèm với đĩa SSD nhanh, điều này không tạo thành một vấn đề trong khi thực hiện các việc cài đặt ứng dụng server .

# Create a 1024 MB SWAP space # The process should complete within less than a minute  sudo dd if=/dev/zero of=/swap bs=1M count=1024 sudo mkswap /swap sudo swapon /swap 

Ta sẽ bắt đầu nhận được sự kết hợp giữa Apache và Hành khách với việc chuẩn bị hệ thống trước với các công cụ mà Hành khách yêu cầu.

Những công cụ này bao gồm những điều sau:

  1. Tiêu đề phát triển cuộn tròn với hỗ trợ SSL

  2. Apache 2

  3. Tiêu đề phát triển Apache 2

  4. Tiêu đề phát triển Apache Portable Runtime (APR)

  5. Tiêu đề phát triển Apache Portable Runtime Utility (APU)

Hãy lấy từng cái một, theo các cách đề xuất của tài liệu Hành khách chính thức:

# Install cURL development headers with SSL support: apt-get install libcurl4-openssl-dev  # Apache 2: apt-get install apache2-mpm-worker  # Apache 2 development headers: apt-get install apache2-threaded-dev  # And finally, Apache PRU (APU) development headers: apt-get install libapr1-dev 

Tiếp theo, hãy download và cài đặt Passenger bằng gem của RubyGems:

gem install passenger  # This method of installing Passenger will use # the available and activated Ruby interpreter. # However, the installation will be available for # all Ruby versions' use. 

Khi ta đã có tất cả các yếu tố cần thiết sẵn sàng, ta có thể có được lớp keo (tức là module ) cho phép Apache và Passenger kết hợp và hoạt động cùng nhau.

Bắt đầu quy trình cài đặt bằng cách chạy lệnh sau:

passenger-install-apache2-module  # Here's what you can expect from the installation process:  # 1. The Apache 2 module will be installed for you. # 2. You'll learn how to configure Apache. # 3. You'll learn how to deploy a Ruby on Rails application.  # .. 

Nhấn Enter để tiếp tục.

Bây giờ trình cài đặt sẽ yêu cầu bạn chọn ngôn ngữ lập trình mà bạn sẽ làm việc. Cuộn xuống bằng các phím mũi tên và sử dụng phím cách để chọn những gì thích hợp cho việc sử dụng của bạn. Vì ta đang nhắm đến việc triển khai Sinatra, lựa chọn của ta sẽ chỉ bao gồm Ruby.

Which languages are you interested in?  Use <space> to select. If the menu doesn't display correctly, ensure that your terminal supports UTF-8.   ‣ ⬢  Ruby    ⬡  Python    ⬡  Node.js    ⬡  Meteor 

Khi bạn đã chọn xong, hãy nhấn enter để chuyển sang bước tiếp theo.

Bây giờ trình cài đặt sẽ bắt đầu biên dịch module Apache.

Lưu ý: Quá trình này có thể mất một khoảng thời gian ngắn - thường là vài phút.

Sự kết hợp giữa Nginx và Unicorn


Lưu ý: Trước khi cài đặt Nginx với Unicorn, hãy đảm bảo tắt (hoặc gỡ bỏ) Apache hoặc cấu hình nó để không chặn Nginx (tức là xung đột cổng / socket ).

Lưu ý: Nếu bạn bị hạn chế về tài nguyên hệ thống (ví dụ: dung lượng RAM bạn có), bạn có thể cần chọn sự kết hợp này để triển khai ứng dụng của bạn .

Nginx và Unicorn cùng nhau tạo nên sự kết hợp tuyệt vời cho việc triển khai ứng dụng web. Unicorn, như ta đã thảo luận trước đây, là một server tuyệt vời hoạt động theo những cách thông minh và giúp user sử dụng tất cả các công cụ hệ thống có sẵn để xử lý công việc - và nó hoạt động rất tốt!

Ta sẽ bắt đầu quá trình cài đặt bằng cách tải Nginx trước. Trình quản lý gói hệ thống mặc định aptitude (hoặc apt-get ) sẽ có thể download và cài đặt Nginx cho ta .

Chạy phần sau để download và cài đặt Nginx bằng aptitude :

aptitude install nginx 

Khi ta đã sẵn sàng Nginx, bước tiếp theo bao gồm việc download server ứng dụng web Unicorn, được thực hiện dễ dàng bởi trình quản lý gói RubyGems.

Chạy phần sau để download và cài đặt Unicorn bằng gem :

gem install unicorn  

Cấu hình


Trong phần này, ta sẽ xem cách cấu hình cả hai tổ hợp server để đưa các ứng dụng của ta trực tuyến. Bạn nên nhớ rằng bất chấp những nỗ lực tiếp thị, bạn có thể triển khai bất kỳ số lượng ứng dụng web nào miễn là bạn cấu hình chúng đúng cách và có đủ tài nguyên hệ thống để hỗ trợ chúng.

Lưu ý: Lưu ý bạn nên chọn cái này hoặc cái kia từ các kết hợp web server / ứng dụng web ở trên trước khi tiếp tục (và áp dụng) các cài đặt bên dưới.

Kết hợp Apache & Hành khách


Sau khi hoàn tất cài đặt Apache, module Apache của Hành khách và Hành khách, bạn sẽ thấy một thông báo có tiêu đề Sắp có!

Vui lòng chỉnh sửa file cấu hình Apache của bạn và thêm các dòng sau:

Mô-đun hành khách LoadModule /usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37/buildout/apache2/modsenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.0/wrappers/ruby
</IfModule>

Sau khi khởi động lại Apache, bạn đã sẵn sàng triển khai bất kỳ số lượng web nào
ứng dụng trên Apache, với số lượng cấu hình tối thiểu!

Vì vậy, như được đề xuất và khuyên, hãy thêm đoạn cấu hình vào file cấu hình Apache của ta .

Chạy phần sau để chỉnh sửa file cấu hình Apache bằng editor nano:

nano /etc/apache2/apache2.conf 

Thêm khối văn bản bên dưới vào nơi bạn thấy phù hợp mà không ảnh hưởng đến các cấu hình khác:

LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c>     PassengerRoot /usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37     PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.0/wrappers/ruby </IfModule> 

Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.

Lưu ý: Cấu hình trên phải được giữ nguyên. Các tham số của nó được xác định theo cách sử dụng version Ruby có liên quan ( 2.1.0 được cài đặt trong hướng dẫn Sinatra đầu tiên) tại vị trí liên quan ( /usr/local/rvm/gems/ruby-2.1.0/.. ).

Tiếp theo, ta cần xác định một ứng dụng theo đề xuất của trình cài đặt:

Triển khai một ứng dụng web: một ví dụ

Giả sử bạn có một ứng dụng web ở / ở đâu đó. Thêm server ảo vào
Tệp cấu hình Apache và đặt DocumentRoot của nó thành / đâu đó / công khai:

<VirtualHost *: 80>
ServerName www.yourhost.com
# !!! Hãy chắc chắn trỏ DocumentRoot thành 'công khai'!
DocumentRoot / where / public

<Thư mục / ở đâu đó / công khai>
# Điều này giúp thư giãn cài đặt bảo mật của Apache.
AllowOverride tất cả
# MultiViews phải được tắt.
Tùy chọn -MultiViews
</Directory>
</VirtualHost>

Bạn có thể triển khai ở bất kỳ đâu bạn thích; tuy nhiên, những gì có thể được coi là một ví dụ tốt đang sử dụng:

  • Một folder con của user , được đặt để triển khai hoặc;

  • Sử dụng vị trí chung /var/www , như ta đã làm trong quá khứ.

Lưu ý: Đối với bước cấu hình tiếp theo này, ta sẽ sử dụng ứng dụng mẫu từ hướng dẫn Sinatra / Ruby 2.1.0 trước đó.

Để cho Apache biết về ứng dụng của ta và yêu cầu Passenger chạy nó, ta cần xác định một server ảo. Vì mục đích này, ta sẽ tạo một file bên trong folder /etc/apache2/sites-available .

Hãy tạo một file cấu hình trống có tên my_app bằng nano:

Lưu ý: Bạn có thể đặt tên file này khi bạn thấy phù hợp để trùng với cài đặt ứng dụng của bạn .

nano /etc/apache2/sites-available/my_app.conf 

Đặt nội dung bên dưới, sửa đổi chúng cho phù hợp với folder triển khai ứng dụng của bạn:

<VirtualHost *:80>     # ServerName [!! Your domain OR server's IP]     ServerName 162.243.74.190       # !!! Be sure to point DocumentRoot to 'public'!     # DocumentRoot [root to your app./public]     DocumentRoot /var/www/my_app/public      # Directory [root to your app./public]     <Directory /var/www/my_app/public>         # This relaxes Apache security settings.         AllowOverride all         # MultiViews must be turned off.         Options -MultiViews     </Directory>  </VirtualHost> 

Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.

Bây giờ ta có thể thêm cấu hình trang web mới của bạn vào Apache:

# Usage sudo a2ensite [configuration name without .conf extension] sudo a2ensite my_app 

Và reload :

service apache2 reload service apache2 restart 

Ứng dụng web của bạn bây giờ sẽ hoạt động và trực tuyến. Truy cập địa chỉ IP của server của bạn hoặc domain bạn đã chuyển hướng và xác định trong cấu hình ServerName :

http://162.243.74.190/  # Hello world! 

Lưu ý: Nếu bạn đã chọn làm việc với một domain , bạn cũng nên thêm nó vào file /etc/hosts bằng lệnh sau:

nano /etc/hosts 

Và thêm domain của bạn vào danh sách:

# 127.0.0.1 [domain.tld] # 127.0.0.1 [www.domain.tld]  127.0.0.1 example.com 127.0.0.1 www.example.com 

Sự kết hợp giữa Nginx và Unicorn


Unicorn có thể được cấu hình theo một số cách. Đối với hướng dẫn này, tập trung vào các yếu tố chính, ta sẽ tạo một file từ đầu, file này sẽ được Unicorn sử dụng khi khởi động daemon server ứng dụng.

Mở tài liệu unicorn.rb trống, tài liệu này sẽ được lưu trong folder folder ứng dụng ( /var/www/my_app ):

nano unicorn.rb 

Đặt khối mã bên dưới, sửa đổi nó nếu cần:

# Set the working application directory # working_directory "/path/to/your/app" working_directory "/var/www/my_app"  # Unicorn PID file location # pid "/path/to/pids/unicorn.pid" pid "/var/www/my_app/pids/unicorn.pid"  # Path to logs # stderr_path "/path/to/logs/unicorn.log" # stdout_path "/path/to/logs/unicorn.log" stderr_path "/var/www/my_app/logs/unicorn.log" stdout_path "/var/www/my_app/logs/unicorn.log"  # Unicorn socket # listen "/tmp/unicorn.[app name].sock" listen "/tmp/unicorn.myapp.sock"  # Number of processes # worker_processes 4 worker_processes 2  # Time-out timeout 30 

Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.

Lưu ý: Để đơn giản kiểm tra ứng dụng của bạn với Unicorn, bạn có thể chạy unicorn bên trong folder ứng dụng.

Tiếp theo, ta cần cho Nginx biết cách nói chuyện với Unicorn. Với mục đích này, ở cấp độ này chỉ cần chỉnh sửa file cấu hình mặc định: default.conf và để nginx.conf như đã cung cấp - file này đã được đặt để bao gồm các cấu hình mặc định.

# Remove the default configuration file rm -v /etc/nginx/sites-available/default  # Create a new, blank configuration nano /etc/nginx/conf.d/default.conf 

Thay thế nội dung file bằng những nội dung từ bên dưới, sửa đổi các bit cần thiết để phù hợp với nhu cầu của bạn:

upstream app {     # Path to Unicorn SOCK file, as defined previously     server unix:/tmp/unicorn.myapp.sock fail_timeout=0; }  server {       listen 80;      # Set the server name, similar to Apache's settings     server_name localhost;      # Application root, as defined previously     root /var/www/my_app/public;      try_files $uri/index.html $uri @app;      location @app {         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;         proxy_set_header Host $http_host;         proxy_redirect off;         proxy_pass http://app;     }      error_page 500 502 503 504 /500.html;     client_max_body_size 4G;     keepalive_timeout 10;  }   

Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.

Lưu ý: Để tìm hiểu thêm về Nginx, bạn có thể tham khảo Cách cấu hình web server Nginx trên VPS .

Hãy khởi động Unicorn và chạy nó dưới dạng daemon bằng cách sử dụng file cấu hình:

# Make sure that you are inside the application directory # i.e. /my_app unicorn -c unicorn.rb -D 

Tiếp theo, ta đã sẵn sàng reload và khởi động lại Nginx:

service nginx restart 

Và đó là nó! Đến đây bạn có thể kiểm tra việc triển khai của bạn bằng cách truy cập địa chỉ IP của server của bạn (hoặc domain được liên kết với nó).

http://162.243.74.190/  # Hello world! 

Đọc thêm


Bức firewall :


Cài đặt firewall bằng Bảng IP

Bảo mật SSH:


Cách bảo vệ SSH bằng fail2ban trên Ubuntu
Cách bảo vệ SSH bằng fail2ban trên CentOS 6

Tạo cảnh báo:


Cách gửi cảnh báo qua e-mail trên VPS CentOS để giám sát hệ thống

Theo dõi và theo dõi log truy cập server hàng ngày:


Cách cài đặt và sử dụng Trình phân tích và báo cáo log Logwatch

Tối ưu hóa Công nhân Unicorn:


Cách tối ưu hóa Unicorn worker trong ứng dụng Ruby on Rails

<div class = “author”> Gửi bởi: <a
href = “https://twitter.com/ostezer”> Hệ điều hành Tezer </a> </div>


Tags:

Các tin liên quan

Cách cấu hình web server theo cụm với Varnish và Nginx trên Ubuntu 13.10
2014-01-24
Cách triển khai các ứng dụng web Flask bằng uWSGI Behind Nginx trên CentOS 6.4
2014-01-14
Cách triển khai ứng dụng web CherryPy đằng sau Nginx Reverse-Proxy
2014-01-14
Cách tạo ứng dụng web với HMVC PHP5 Framework Kohana
2013-12-30
Hướng dẫn đơn giản về cách cài đặt ứng dụng trực diện web trên VPS
2013-12-09
So sánh web server (Rack) cho Ứng dụng Web Ruby
2013-11-25
So sánh các web server cho các ứng dụng web dựa trên Python
2013-10-28
Cách sử dụng node.js, request và cheerio để thiết lập Web-Scraping đơn giản
2013-09-16
Cách tạo một ứng dụng web nhỏ với CakePHP trên VPS (Phần 1)
2013-08-23
Cách mở rộng ứng dụng web trên Ubuntu 12.10
2013-04-11