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