Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

Rake ใน Ruby คืออะไรและใช้งานอย่างไร

Rake เป็นนักวิ่งยอดนิยมใน Ruby

งานคืออะไร

  • การสำรองฐานข้อมูลของคุณ
  • ดำเนินการทดสอบของคุณ
  • สถิติการรวบรวมและการรายงาน

งานเหล่านี้เป็นงานเล็กๆ ที่ไม่มี Rake จะกระจัดกระจายไปทั่วโปรเจ็กต์ของคุณในไฟล์ต่างๆ

คราดรวมศูนย์การเข้าถึงงานของคุณ

Rake ยังทำให้บางสิ่งง่ายขึ้นด้วย เช่น การค้นหาไฟล์ที่ตรงกับรูปแบบเฉพาะ &ที่เพิ่งแก้ไข

อีกสิ่งหนึ่ง :

อย่าสับสน Rake กับ Rack ชื่อคล้ายกันมาก แต่ต่างกันโดยสิ้นเชิง

  • คราด เป็นผู้ดำเนินการ
  • แร็ค ช่วยให้เซิร์ฟเวอร์และเฟรมเวิร์กของ Ruby ทำงานร่วมกันได้

ตอนนี้:

มาสำรวจคราดอย่างละเอียดกันดีกว่า!

ใครใช้คราด

ราง!

หากคุณเคยทำอะไรกับ Rails มาก่อน คุณอาจคุ้นเคยกับ rake db:migrate คำสั่ง

หรือ rake routes .

นั่นคือ Rake ที่ใช้งานจริงที่นั่น

ขอให้สังเกตว่า Rails ตั้งแต่เวอร์ชัน 5.0 ให้คุณเรียก rake . ได้มากที่สุด คำสั่งด้วย rails แทน

กล่าวอีกนัยหนึ่ง :

คุณสามารถทำ rails db:migrate แต่คราดยังทำงานอยู่

วิธีการเขียนงานคราด

นี่เป็นงาน Rake ง่ายๆ:

desc "Print reminder about eating more fruit."

task :apple do
  puts "Eat more apples!"
end

คุณสามารถใส่รหัสนี้ในไฟล์ชื่อ Rakefile หรือหากคุณใช้ Rails คุณสามารถบันทึกไว้ใน lib/tasks/apple.rake .

เพื่อเรียกใช้งานนี้ :

rake apple

# "Eat more apples!"

ภายในงาน คุณสามารถเขียนโค้ด Ruby ปกติได้ แต่มีวิธี Rake ที่เป็นประโยชน์บางอย่างที่คุณสามารถใช้ได้

ตัวอย่างเช่น :

  • ruby (เรียกใช้ไฟล์ Ruby)
  • sh (รันคำสั่งของระบบ)
  • safe_ln (สร้างลิงก์สัญลักษณ์ในระบบไฟล์ของคุณ)

คราดรวม FileUtils โมดูล

นั่นหมายความว่าคุณสามารถคัดลอกไฟล์ด้วย cp , สร้างไดเร็กทอรีด้วย mkdir_p และแม้กระทั่งเปลี่ยนการอนุญาตไฟล์ด้วย chown .

นี่คือตัวอย่าง :

task :clean_cache do
  rm_r FileList["tmp/cache/*"]
end

ระวังด้วย rm_r (ลบด้วยการเรียกซ้ำ) เนื่องจากจะลบไฟล์โดยไม่มีการยืนยัน หากคุณต้องการเพิ่มขั้นตอนการยืนยัน คุณสามารถเพิ่มงานที่ขึ้นต่อกัน (กล่าวถึงในบทความนี้) และยกข้อยกเว้นขึ้นหากคุณไม่ต้องการดำเนินการต่อ

รันคำสั่ง Rake ภายในไดเร็กทอรีอื่น

คุณอาจต้องการเรียกใช้คำสั่ง Rake ภายในไดเร็กทอรีที่ระบุ

ตามนี้ :

task :import do
  puts "Importing data..."

  Dir.chdir(Rails.root.join("data")) { ruby "load-data.rb" }
end

ในตัวอย่างนี้ ฉันกำลังเรียกใช้สคริปต์ Ruby ภายใน data โฟลเดอร์ในโครงการ Rails ของฉัน

วิธีใช้เนมสเปซในคราด

เนื่องจากงานสามารถมีชื่อคล้ายกันได้ จึงง่ายที่จะใช้ชื่อเดียวกันสองครั้ง

นั่นคือเหตุผลที่ Rake มีเนมสเปซ

ตัวอย่างเช่น :

คุณสามารถสร้าง backup เนมสเปซสำหรับงานสำรองข้อมูลทั้งหมดของคุณ

ถูกใจสิ่งนี้ :

namespace :backup do
  task :create do
    # ...
  end

  task :list do
    # ...
  end

  task :restore do
    # ...
  end
end

ในการเรียกใช้งานเนมสเปซ :

rake backup:create

งานขึ้นอยู่กับ

Rake ให้คุณกำหนดรายการงานอื่นๆ ที่ต้องรันก่อนงานปัจจุบัน

ด้วยสิ่งนี้ คุณสามารถตั้งค่าใดๆ ที่งานต้องการได้

ตัวอย่าง:

task create_examples: "load_database" do
  # ...
end

ในตัวอย่างนี้ load_database จะทำงานก่อน create_examples .

รายการงานที่ขึ้นต่อกันยังสามารถเป็นอาร์เรย์ของสตริงหรืออาร์เรย์ของสัญลักษณ์ได้

เรียกใช้งานคราดภายในงานอื่น

ถ้าแทนที่จะมีชุดของงานที่รันก่อนงานปัจจุบัน คุณต้องการรันงานอื่นภายในงานปัจจุบัน คุณสามารถใช้โค้ดต่อไปนี้ได้

ตัวอย่าง :

task :coverage do
  ENV['COVERAGE'] = 'true'
  Rake::Task["test"].execute
end

ซึ่งจะเป็นประโยชน์ในการตั้งค่าตัวแปรสภาพแวดล้อมที่ช่วยให้ครอบคลุมการทดสอบและตัวเลือกอื่นๆ

วิธีใช้กฎคราด

กฎกำหนดการแปลงนามสกุลไฟล์

ตัวอย่าง :

task compress: FileList["/tmp/*.txt"].ext(".txt.gz")

rule '.txt.gz' => '.txt' do |t|
  sh "gzip", "-k", "-f", t.source
end

ประโยชน์ของการใช้กฎคือเมื่อไฟล์ถูกบีบอัดแล้ว ไฟล์จะไม่ถูกบีบอัดอีกจนกว่าไฟล์ต้นฉบับจะเปลี่ยนไป

สังเกตบางสิ่งในโค้ดนี้ :

  1. เราใช้ FileList class ซึ่งเป็นส่วนหนึ่งของ Rake เพื่อกำหนดรายการไฟล์ที่เราต้องการใช้งาน
  2. กฎเริ่มต้นด้วยส่วนขยาย TARGET เพื่อให้กฎตรงกัน เราต้องใช้ .ext(".txt.gz") ใน FileList .
  3. นี่ .txt.gz => .txt ไม่ได้หมายความว่าเราไปจาก txt.gz เป็น txt มันเป็นวิธีอื่น ลูกศรคือไวยากรณ์แฮช

ตัวเลือกและคำสั่งคราด

นี่คือรายการตัวเลือกคราดที่มีประโยชน์ :

  • rake -T (แสดงรายการงานที่มี)
  • rake -P (รายการงานและการอ้างอิง)
  • rake -W (รายการงาน &ตำแหน่งที่กำหนดไว้)
  • rake -V (โหมด verbose, คำสั่งระบบ echo)
  • rake -t (โหมดดีบัก)
  • rake -f (ใช้ Rakefile เฉพาะ)

ตัวอย่างเช่น ในแอป 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

สรุป

คุณได้เรียนรู้เกี่ยวกับ Rake นักวิ่งยอดนิยมของ Ruby แล้ว

ใช้ rake -T เพื่อค้นหาว่ามีงานใดบ้าง ให้สร้างงานของคุณเองและเพิ่มลงใน Rakefile หรือภายใน lib/tasks โฟลเดอร์ และจำไว้ว่า Rake &Rack เป็นสิ่งที่แตกต่างกัน

Rake ใน Ruby คืออะไรและใช้งานอย่างไร

อย่าลืมที่จะแบ่งปันบทความนี้เพื่อให้คนอื่น ๆ สามารถเพลิดเพลินกับมันได้ 🙂

ขอบคุณสำหรับการอ่าน!