1. Giới thiệu về Rake Task trong Rails
Rails sử dụng Rake là để quản lí các task, có thể hiểu là các command để quản lý ứng dụng Rails. VD các task được Rails hỗ trợ như là: rake db:migrate, rake db:create, rake db:seed… Ngoài ra các bạn có thể tạo Task cho riêng mình. Bài viết này mình sẽ hướng dẫn các bạn tạo Rake Task để quản lý WEBrick của Rails bao gồm start, stop và restart WEBrick Server.
2. Tạo và quản lý Rake Task
2.1. Cú pháp tạo Rake Task
Rails 5 có thể nhóm nhiều Task trong 1 Namespace, để tạo Task trong các bạn sử dụng command sau để generate,
rails g task my_namespace my_task1 my_task2
Kết quả của command sẽ tạo ra 1 file my_namespace.rake trong thư mục app/lib/tasks chứa các task là my_task1 và my_task2
Khi đó command để thực thi các task sẽ là: [ bin/rake my_namespace:my_task1 ] và [ bin/rake my_namespace:my_task2 ]. Trong Rails 5 có thể sử dụng rails thay cho bin/rake
2.2. Tạo Task quản lý WEBrick
Trong bài viết này mình sẽ tạo các task quản lý WEBrick Web Server của Rails 5. Đầu tiên chạy command sau để tạo rake file.
rails g task server start stop restart

Kết quả của command trên sẽ tạo ra file app/lib/tasks/server.rake có nội dung như sau:
namespace :server do desc "TODO" task start: :environment do end desc "TODO" task stop: :environment do end desc "TODO" task restart: :environment do end end
Chỉnh sửa file trên để thực hiện nhiệm vụ là start, stop, restart WEBrick
namespace :server do
desc 'TODO'
task start: :environment do
print "Starting WEBrick\n"
system 'rails s -d -b 127.0.0.1'
end
desc 'TODO'
task stop: :environment do
pid_file = 'tmp/pids/server.pid'
if File.file?(pid_file)
print "Shutting down WEBrick\n"
pid = File.read(pid_file).to_i
Process.kill 'INT', pid
end
File.file?(pid_file) && File.delete(pid_file)
end
desc 'TODO'
task restart: :environment do
print "Restarting WEBrick\n"
system 'rails server:stop'
system 'rails server:start'
end
end
Giờ test thử các task vừa tạo với 3 command sau:
bin/rake server:start bin/rake server:restart bin/rake server:stop
Kết quả thật mỹ mãn

2.3. Liệt kê danh sách các Task
Sử dụng command sau để list danh sách các Task trong Rails
bin/rake -P
2.4. Override lại Task đã có
Rails hỗ trợ sẵn các task để quản lý ứng dụng, may mắn là nó cho phép chúng ta override lại các Task đó. Để định nghĩa lại Task, ví dụ db:seed chẳng hạn, mình tạo 1 file app/lib/tasks/db.rake có nội dung như sau:
namespace :db do
task seed: :environment do
puts "We need modify db:seed task here."
end
end
Nguồn: vinasupport.com