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