Cài đặt Action Cable với Passenger và Nginx
Bài đăng này đã không được cập nhật trong 7 năm
1.Tổng quan
Có hai cách để setup Action Cable với Passenger + Nginx :
- Chạy Action Cable server trên cùng một host và port với với sub-URI
- Chạy Action Cable server trên một host hoặc port khác.
2. Yêu cầu
- Passenger 5.0.24 trở lên
- Redis, PostgreSQL hoặc bất kỳ inter-process adapter này hỗ trợ Action Cable (ở bài viết này tôi dùng Redis)
Config config/cable.yml
production:
adapter: redis
url: redis://redis.example.com:6379
local: &local
adapter: redis
url: redis://localhost:6379
development: *local
test: *local
Và đừng quên bật Redis nhé .
3 Chạy Action Cable server trên cùng một host và port dưới một sub-URI
Đây là phương pháp setup mặc định được Rails khuyến nghị sử dụng và cũng là cách dễ nhất. Nó được chạy bằng cách khai báo ActionCable.server
là một path được khai báo trong config/routes.rb
. Mặc dùng vậy Passenger thực tế sẽ chậy nó ở một tiếng trình riêng biệt
Ví dụ routes.rb
# Serve websocket cable requests in-process
mount ActionCable.server => "/cable"
Tiếp đó bạn phải config Nginx. Giả sử bạn có một máy chủ được config như bên dưới :
server {
listen 80;
server_name www.foo.com;
root /path-to-your-app/public;
passenger_enabled on;
}
Giờ bạn thêm location
block để config Action Cable như sau :
server {
listen 80;
server_name www.foo.com;
root /path-to-your-app/public;
passenger_enabled on;
### INSERT THIS!!! ###
location /cable {
passenger_app_group_name YOUR_APP_NAME_HERE_action_cable;
passenger_force_max_concurrent_requests_per_process 0;
}
}
Lưu ý :
- Thay
/cable
thành tên path Action Cable được khai báo trongroutes.rb
- Thay
YOUR_APP_NAME_HERE
thành một tên duy nhất và không trùng với bất kì config này được viết trong file config Nginx
4. Chạy Action Cable server trên host hoặc port khác
Trước khi config Passenger, bạn phải khai báo một hostname và một port cho Action Cable server của bạn.
Mở file config/environments/development.rb
hoặc config/environments/production.rb
và đặc biệt chú ý đến config.action_cable.url
.
Tạo Rackup file
Cài đặt yêu cầu một Rackup file cho Action Cable. Một Rackup configuration đơn giản sẽ có dạng
cable/config.ru
require ::File.expand_path('../../config/environment', __FILE__)
Rails.application.eager_load!
run ActionCable.server
Tạo một virtual host cho Action Cable server
Bạn tạo một virtual host với config như bên dưới:
server {
listen YOUR_ACTION_CABLE_PORT_NUMBER_HERE;
server_name YOUR_ACTION_CABLE_HOST_NAME_HERE;
root /path-to-your-app/public;
passenger_enabled on;
passenger_app_group_name YOUR_APP_NAME_HERE_action_cable;
passenger_app_type rack;
passenger_startup_file config/cable.ru;
passenger_force_max_concurrent_requests_per_process 0;
}
- Thay
YOUR_APP_NAME_HERE
thành một tên duy nhất và không trùng với bất kì config này được viết trong file config Nginx
5. Tổng kết
Như vậy tôi đã hướng dẫn cho các bạn cách để cài đặt Action Cable kết hợp với Passenger và Nginx cho cả 2 trường hợp dùng chung và dùng riêng server. Chúc các bạn thành công !!!
All rights reserved