Rake là một trình chạy nhiệm vụ phổ biến trong Ruby.
Nhiệm vụ là gì?
- Tạo bản sao lưu cơ sở dữ liệu của bạn
- Đang chạy các bài kiểm tra của bạn
- Thu thập và báo cáo thống kê
Đây là những tác vụ nhỏ mà không có Rake sẽ nằm rải rác trong dự án của bạn trên các tệp khác nhau.
Rake tập trung quyền truy cập vào các nhiệm vụ của bạn.
Rake cũng làm cho một số việc dễ dàng hơn, chẳng hạn như tìm các tệp phù hợp với một mẫu nhất định và đã được sửa đổi gần đây.
Một điều nữa :
Đừng nhầm lẫn Rake với Rack, những cái tên rất giống nhau nhưng hoàn toàn khác.
- Rake là một người chạy nhiệm vụ.
- Giá đỡ giúp các máy chủ và khuôn khổ Ruby hoạt động cùng nhau.
Bây giờ:
Hãy cùng khám phá Rake chi tiết hơn!
Ai sử dụng Rake?
Đường ray!
Nếu bạn đã làm bất cứ điều gì với Rails, có thể bạn đã quen thuộc với rake db:migrate
lệnh.
Hoặc rake routes
.
Đó là Rake đang hoạt động ngay tại đó.
Lưu ý rằng Rails, kể từ phiên bản 5.0, cho phép bạn gọi hầu hết rake
lệnh với rails
thay vào đó.
Nói cách khác :
Bạn có thể thực hiện rails db:migrate
, nhưng Rake vẫn đang làm việc.
Cách viết nhiệm vụ thực hiện
Đây là một nhiệm vụ Cào đơn giản:
desc "Print reminder about eating more fruit." task :apple do puts "Eat more apples!" end
Bạn có thể đặt mã này bên trong tệp có tên Rakefile
hoặc nếu bạn đang sử dụng Rails, bạn có thể lưu nó trong lib/tasks/apple.rake
.
Để chạy tác vụ này :
rake apple # "Eat more apples!"
Bên trong task, bạn có thể viết mã Ruby bình thường, nhưng có một số phương pháp Rake hữu ích mà bạn có thể sử dụng.
Ví dụ :
- ruby (chạy tệp Ruby)
- sh (chạy các lệnh hệ thống)
- safe_ln (tạo một liên kết tượng trưng trong hệ thống tệp của bạn)
Rake bao gồm FileUtils
mô-đun.
Điều đó có nghĩa là bạn có thể sao chép tệp bằng cp
, tạo thư mục với mkdir_p
và thậm chí thay đổi quyền đối với tệp với chown
.
Đây là một ví dụ :
task :clean_cache do rm_r FileList["tmp/cache/*"] end
Cẩn thận với rm_r
(xóa bằng đệ quy) vì nó sẽ xóa tệp mà không cần xác nhận, nếu bạn muốn thêm bước xác nhận, bạn có thể thêm tác vụ phụ thuộc (được đề cập ở phần sau của bài viết này) và nêu ra một ngoại lệ nếu bạn không muốn tiếp tục.
Chạy lệnh Rake bên trong một thư mục khác
Bạn có thể muốn chạy lệnh Rake bên trong một thư mục cụ thể.
Đây là cách thực hiện :
task :import do puts "Importing data..." Dir.chdir(Rails.root.join("data")) { ruby "load-data.rb" } end
Trong ví dụ này, tôi đang chạy một tập lệnh Ruby bên trong data
trong dự án Rails của tôi.
Cách sử dụng Không gian tên trong Rake
Vì các nhiệm vụ có thể có tên giống nhau, nên việc sử dụng cùng một tên hai lần rất dễ dàng.
Đó là lý do tại sao Rake có không gian tên.
Ví dụ :
Bạn có thể tạo một backup
không gian tên cho tất cả các tác vụ sao lưu của bạn.
Như thế này :
namespace :backup do task :create do # ... end task :list do # ... end task :restore do # ... end end
Để chạy một tác vụ có không gian tên :
rake backup:create
Nhiệm vụ phụ thuộc
Rake cho phép bạn xác định danh sách các tác vụ khác phải chạy trước tác vụ hiện tại.
Với điều này, bạn có thể thực hiện bất kỳ thiết lập nào mà tác vụ cần.
Ví dụ:
task create_examples: "load_database" do # ... end
Trong ví dụ này, load_database
sẽ chạy trước create_examples
.
Danh sách các nhiệm vụ phụ thuộc cũng có thể là một mảng chuỗi hoặc một mảng ký hiệu.
Chạy một tác vụ thực hiện trong một tác vụ khác
Nếu thay vì có một nhóm tác vụ chạy TRƯỚC tác vụ hiện tại, bạn muốn chạy một tác vụ khác trong tác vụ hiện tại, thì bạn có thể sử dụng mã sau.
Ví dụ :
task :coverage do ENV['COVERAGE'] = 'true' Rake::Task["test"].execute end
Điều này có thể hữu ích để đặt các biến môi trường cho phép phạm vi kiểm tra và các tùy chọn khác.
Cách sử dụng quy tắc cào
Các quy tắc xác định các chuyển đổi phần mở rộng tệp.
Ví dụ :
task compress: FileList["/tmp/*.txt"].ext(".txt.gz") rule '.txt.gz' => '.txt' do |t| sh "gzip", "-k", "-f", t.source end
Lợi ích của việc sử dụng các quy tắc là khi một tệp đã được nén, nó sẽ không được nén lại cho đến khi tệp nguồn thay đổi.
Lưu ý một số điều trong mã này :
- Chúng tôi sử dụng
FileList
, là một phần của Rake, để xác định danh sách các tệp mà chúng tôi muốn làm việc. - Quy tắc bắt đầu bằng phần mở rộng TARGET, để làm cho quy tắc phù hợp, chúng tôi phải sử dụng
.ext(".txt.gz")
trênFileList
. -
.txt.gz => .txt
này không có nghĩa là chúng ta đi từtxt.gz
tớitxt
, thì ngược lại. Mũi tên là cú pháp băm.
Tùy chọn &lệnh cào
Dưới đây là danh sách các tùy chọn Rake hữu ích :
- rake -T (liệt kê các nhiệm vụ có sẵn)
- rake -P (liệt kê các nhiệm vụ và sự phụ thuộc của chúng)
- rake -W (liệt kê các nhiệm vụ và nơi chúng được xác định)
- rake -V (chế độ chi tiết, lệnh hệ thống tiếng vọng)
- rake -t (chế độ gỡ lỗi)
- rake -f (sử dụng một Rakefile cụ thể)
Ví dụ:trong ứng dụng Rails :
> rake -T test rake test # Runs all tests in test folder except system ones rake test:db # Run tests quickly, but also reset db rake test:system # Run system tests only
Tóm tắt
Bạn đã tìm hiểu về Rake, một trình chạy nhiệm vụ phổ biến cho Ruby.
Sử dụng rake -T
để tìm hiểu những tác vụ có sẵn, hãy tạo các tác vụ của riêng bạn và thêm chúng vào Rakefile
hoặc bên trong lib/tasks
và hãy nhớ rằng Rake
&Rack
là những thứ khác nhau.
Đừng quên chia sẻ bài viết này để nhiều người cùng thưởng thức nhé 🙂
Cảm ơn vì đã đọc!