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
1
gem i foreman
Hoặc bỏ vào Gemfile của Rails application
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
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õ
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
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
1
touch bin/server
Set permission cho file vừa tạo
1
chmod 777 bin/server
Edit nội dung bên trong file
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.