12/08/2018, 14:16

Rake task Rails

Trong lập trình với rails, để tạo các bảng cơ sở dữ liệu, chắc hẳn các bạn đã quen thuộc với các lệnh rails : rails db:create rails db:migrate Ngoài ra, bạn cũng đã từng định nghĩa các rake task khác để tiện sử dụng trong rails app của mình. Các file .rake trong thư mục libs/tasks/.. ...

Trong lập trình với rails, để tạo các bảng cơ sở dữ liệu, chắc hẳn các bạn đã quen thuộc với các lệnh rails :

 rails db:create
 rails db:migrate

Ngoài ra, bạn cũng đã từng định nghĩa các rake task khác để tiện sử dụng trong rails app của mình. Các file .rake trong thư mục libs/tasks/..

  1. Rake?

    Rake do tác giả Jim Weirich phát triển với ý tưởng là một công cụ hỗ trợ chạy các ruby code. Rake cho phép định nghĩa các list task kèm theo dependency của nó với mục đích gom nhóm các đoạn code ruby thường xuyên sử dụng trong Ruby vào một task chung để sử dụng lại nhiều lần.

  2. Định nghĩa rake file

    Để tạo rake file trong rails, sử dụng câu lệnh :

       rails g task [namespace] [task]
 lệnh trên sẽ tạo một file .rake mới ngay trong thư mục lib/tasks/ với tên file trùng với tên task.

Giả sử, muốn tạo 1 rake file có tên là user:
      rails g task user
      ->>>>  Sau khi chay xong lệnh trên,
            create  lib/tasks/user.rake
Trong lib/tasks sẽ có thêm file rake user.rake
       namespace :user do
       end
Viết code định nghĩa task bạn thực hiện, chú ý định nghĩa dependency :enviroment để có thể load các dữ liệu     cần thiết từ rails app nhé chẳng hạn như các model, …
    namespace :user do
	  desc "This is my first rails app"
	  task :task => :enviroment do
	  end
   end

Để kiểm tra các task được định nghĩa trong hệ thống:

      rake -T hoặc rails -T
      Một số rake trong hệ thống :
      rake db:create                          # Creates the database from DATABAS...
      rake db:drop                            # Drops the database from DATABASE_...
      rake db:environment:set                 # Set the environment value for the...
      rake db:fixtures:load                   # Loads fixtures into the current e...
      rake db:migrate                         # Migrate the database (options: VE...
      rake db:migrate:status                  # Display status of migrations
      rake db:rollback                        # Rolls the schema back to the prev...
      rake user:task                          # This is my first rails app
      ....

Mình tạo một task trong file user.rake

     task :hello do
       puts "Nice to meet you!!"
    end

Sau đó mình chạy file rake :

   rake hello / rails hello
   ->>> Kết quả:
      Nice to meet you!!!
  1. Một số khác về rake task

    a. Dùng task này để gọi task kia.

      task :hello do
        puts "Nice to meet you!!"
      end

      task ask: :hello do
        puts "What is your name?"
      end

Sau đó, bạn chạy lệnh

     rake ask / rails ask
     ->> Kết quả:
     Nice to meet you!!
     What is your name?

b. Lược bỏ các rake task nguy hiểm Bạn có thể dùng các lệnh rake task để giảm thiểu rủi ro, nhất là trên production:

     rake db:drop
     rake db:reset

     hoặc

     rails db:drop
     rails db:reset

Trên đây là một số tìm hiểu về rake task của mình. Bài viết còn nhiều thiếu sót, mong mọi người góp ý. Cảm ơn mọi người vì đã đọc bài tìm hiểu của mình.

Tham khảo: http://railscasts.com/episodes/66-custom-rake-tasks?autoplay=true

0