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

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

ByYuto 12/10/2024 23:29
5min read

Tìm hiểu cách sử dụng Foreman trong Ruby on Rails để quản lý các tiến trình và cấu hình ứng dụng của bạn một cách dễ dàng và hiệu quả. Bài viết sẽ hướng dẫn bạn cách cài đặt và sử dụng Foreman để tối ưu hóa quản lý tiến trình của ứng dụng Ruby on Rails.

Foreman là gì

Foreman là một công cụ quản lý tiến trình dành cho các dự án Ruby on Rails. Nó cho phép bạn khởi động, quản lý và theo dõi các tiến trình của dự án, chẳng hạn như các tiến trình của web server, các tiến trình background và các tiến trình khác mà dự án của bạn cần.

Tóm lại 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ách cài đặt Foreman

Cài đặt gem foreman

zsh
Copy
1
gem i foreman

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

Gemfile
Copy
1
2
3
group :development do 
  gem 'foreman'
end

Cách sử dụng Foreman trong Rails

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

zsh
Copy
1
2
3
4
5
6
7
8
9
10
11
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õ

zsh
Copy
1
foreman start -f Procfile.dev

Procfile.dev

Procfile.dev là gì?

Procfile.dev là một file sử dụng bởi gem Foreman trong các ứng dụng Ruby on Rails để chỉ định các tiến trình được chạy. Procfile.dev tương tự như Procfile, nhưng nó dành cho môi trường development, đối với production thì là Procfile.

Cú pháp và cấu trúc của Procfile.dev giống như Procfile, nó được sử dụng để xác định một tập các loại tiến trình và các lệnh để chạy. Nó cho phép lập trình viên chạy nhiều tiến trình trong chế độ phát triển, chẳng hạn như server, background job, tất cả với một lệnh duy nhất, làm cho quá trình phát triển tiện lợi và hiệu quả hơn.

Ví dụ về Procfile.dev

Procfile.dev
Copy
1
2
3
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 của Procfile.dev

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 của Procfile.dev

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

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

zsh
Copy
1
touch bin/server

Set permission cho file vừa tạo

zsh
Copy
1
chmod 777 bin/server 

Edit nội dung bên trong file

bin/server
Copy
1
2
3
4
5
6
7
8
9
#!/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.

Đánh giá bài viết: 5/5 (17 đánh giá)
Bạn chưa đánh giá

Bình luận

Author
hoclaptrinh.io author
Tác giả:Yuto Yasunaga

Mình là một full stack developer, tốt nghiệp và làm việc tại Nhật Bản. Trang web này là nơi mình tổng hợp, đúc kết và lưu trữ lại những kiến thức trong quá trình học và làm việc liên quan đến IT.
Hy vọng những bài viết ở website này sẽ có ích cho bạn.