[Ruby on Rails] Tạo và quản lý Rake Task


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_task1my_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

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web