Latest Post

Tăng thứ hạng và truy cập tự nhiên với 10 phương pháp SEO hay nhất Kiếm Tiền Online (mmo): Khái Niệm và Các Hình Thức Phổ Biến

1. Giới thiệu về Rake Task trong Rails

Ruby on Rails sử dụng Rake để quản lý các tác vụ, mà bạn có thể xem chúng như các lệnh để điều khiển ứng dụng Rails của mình. Ví dụ về các tác vụ mà Rails hỗ trợ bao gồm `rake db:migrate`, `rake db:create`, `rake db:seed`, và nhiều tác vụ khác. Tuy nhiên, bạn cũng có khả năng tự tạo các tác vụ riêng cho dự án của mình.

Bài viết này sẽ hướng dẫn cách tạo một Rake Task để quản lý WEBrick Server trong Rails, bao gồm các tác vụ để khởi động (start), dừng (stop), và khởi động lại (restart) WEBrick Server.

2. Tạo và quản lý Rake Task

2.1. Cú pháp tạo Rake Task

Trong Rails 5, bạn có khả năng nhóm nhiều Task lại với nhau trong một Namespace. Để tạo các Task trong Namespace, bạn có thể sử dụng lệnh sau để tạo:

“`
rails g task my_namespace my_task1 my_task2
“`

Kết quả của lệnh này sẽ tạo ra một tệp tin có tên là `my_namespace.rake` trong thư mục `app/lib/tasks`. Tệp này sẽ chứa hai Task là `my_task1` và `my_task2`.

Sau khi tạo các Task trong Namespace, bạn có thể thực thi chúng bằng cách sử dụng lệnh sau:

“`
bin/rake my_namespace:my_task1
bin/rake my_namespace:my_task2
“`

Tuy nhiên, trong Rails 5, bạn cũng có thể sử dụng lệnh `rails` thay vì `bin/rake` như sau:

“`
rails my_namespace:my_task1
rails my_namespace:my_task2
“`

Điều này giúp bạn thực hiện các Task một cách dễ dàng hơn trong Rails 5.

2.2. Tạo Task quản lý WEBrick

Trong bài viết này, chúng ta sẽ tạo các tác vụ (task) để quản lý máy chủ web WEBrick của Rails 5. Để bắt đầu, hãy thực hiện lệnh sau để tạo tệp rake.

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 WEBrickn"
    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 WEBrickn"
      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 WEBrickn"
    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ó

Ruby on Rails cung cấp sẵn một loạt các tác vụ để quản lý ứng dụng, và điều tốt là chúng ta có khả năng ghi đè lên những tác vụ này. Để định nghĩa lại một tác vụ, chẳng hạn như db:seed, bạn có thể tạo một tệp app/lib/tasks/db.rake với nội dung sau đây:

namespace :db do
  task seed: :environment do
    puts "We need modify db:seed task here."
  end
end

Trả lời

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 *