Dùng foreman để khởi động Ruby on Rails application với nhiều process

Ruby on Rails Ruby Gem

Updated by Yuto Yasunaga at 2021/01/16 08:55

Foreman là gì

Foreman là một tool dùng để quản lý nhiều process cùng chạy của một Rails application, các process đọc từ file có tên là Procfile, mình nghĩ Proc ở đây là viết tắt của process 😆

Cài đặt

Cài đặt gem foreman

gem install foreman

Hoặc bỏ vào Gemfile của Rails application

Gemfile
group :development do 
  gem 'foreman'
  ...
end

Cách sử dụng

Trong terminal gõ foreman -h sẽ hiển thị ra danh sách các lệnh, options

Commands:
  foreman check                   # Validate your application's Procfile
  foreman export FORMAT LOCATION  # Export the application to another process management format
  foreman help [COMMAND]          # Describe available commands or one specific command
  foreman run COMMAND [ARGS...]   # Run a command using your application's environment
  foreman start [PROCESS]         # Start the application (or a specific PROCESS)
  foreman version                 # Display Foreman gem version

Options:
  -f, [--procfile=PROCFILE]  # Default: Procfile
  -d, [--root=ROOT]          # Default: Procfile directory

Về cơ bản thì khi sử dụng chỉ cần gõ

foreman start -f Procfile.dev

Ví dụ về Procfile.dev

Đây là ví dụ về bên trong file Procfile.dev của mình.

web: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
webpacker: ./bin/webpack-dev-server
sidekiq: bundle exec sidekiq -C config/sidekiq.yml

Mình chạy 3 process cho Rails application:
web: Là lệnh thường dùng khi khởi động server, mình có cải tiến thêm là check và xóa file .pid nếu tồn tại, set port cho server
webpacker: Khởi động webpacker cho phần frontend
sidekiq: Khởi động sidekiq cho việc chạy các background job

Ưu điểm

Dồn các process vào 1 file để khởi động, không cần phải chạy riêng lẻ từng process ở các tab terminal khác nhau

Nhược điểm

Log của các process hiển thị dồn vào 1 màn hình terminal, khó để phân biệt
Khi dùng byebug của Rails để debug thì các dòng chữ gõ vào sẽ không hiển thị lên màn hình

Optional: Tùy biến file cho việc khởi động server

Bởi vì thường hay dùng lệnh bundle install để cài đặt gem mới và yarn install để cài đặt các package cần thiết, do đó mình dồn hết các tiến trình trên để tự động chạy một lần

Tạo file bin/server

touch bin/server

Set permission cho file vừa tạo

chmod 777 bin/server 

Edit nội dung bên trong file

#!/bin/bash -i
echo -e '\n========== INSTALL GEMS 💎 ==========\n'
bundle install

echo -e '\n========== INSTALL YARN 🔗 ==========\n'
yarn install --check-files

echo -e '\n========== START SERVER 📡 ==========\n'
bundle exec foreman start -f Procfile.dev

Nội dung file trên là thực hiện lần lượt bundle install, yarn install, và cuối cùng là dùng foreman để khởi động các process trong file Procfile.dev

Do đó, mỗi lần muốn khởi động server mình chỉ cần gõ bin/server là xong, không cần phải chạy riêng từng process ở các tab terminal khác nhau nữa, rất gọn.


Back