Computer >> Máy Tính >  >> Lập trình >> Ruby

Rake trong Ruby là gì và Cách sử dụng nó

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 :

  1. 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.
  2. 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ên FileList .
  3. .txt.gz => .txt này không có nghĩa là chúng ta đi từ txt.gz tới txt , 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.

Rake trong Ruby là gì và Cách sử dụng nó

Đừ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!