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
ประโยชน์ของการใช้กฎคือเมื่อไฟล์ถูกบีบอัดแล้ว ไฟล์จะไม่ถูกบีบอัดอีกจนกว่าไฟล์ต้นฉบับจะเปลี่ยนไป
สังเกตบางสิ่งในโค้ดนี้ :
- เราใช้
FileList
class ซึ่งเป็นส่วนหนึ่งของ Rake เพื่อกำหนดรายการไฟล์ที่เราต้องการใช้งาน - กฎเริ่มต้นด้วยส่วนขยาย TARGET เพื่อให้กฎตรงกัน เราต้องใช้
.ext(".txt.gz")
ในFileList
. - นี่
.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
เป็นสิ่งที่แตกต่างกัน
อย่าลืมที่จะแบ่งปันบทความนี้เพื่อให้คนอื่น ๆ สามารถเพลิดเพลินกับมันได้ 🙂
ขอบคุณสำหรับการอ่าน!