เนื่องจากแฟน ๆ Ruby on Rails ส่วนใหญ่อาจทราบดีว่า Rails 6 กำลังจะเปิดตัวเร็ว ๆ นี้พร้อมกับนำเสนอคุณสมบัติและการเปลี่ยนแปลงที่รอคอยอย่างใจจดใจจ่อ จุดมุ่งหมายของบทความนี้คือเพื่อให้คุณคุ้นเคยกับคุณสมบัติหลักที่เพิ่มเข้ามาใน Rails 6 และสรุปว่าจะช่วยปรับปรุงแอปพลิเคชันของคุณให้ดีขึ้นได้อย่างไรซึ่งจะช่วยประหยัดเวลาในการพัฒนาอันมีค่า
สำหรับผู้เริ่มต้นโปรดจำไว้ว่า Rails 6 ต้องใช้ Ruby 2.5+ และฐานข้อมูลที่อัปเกรดแล้ว ดังนั้นตรวจสอบให้แน่ใจว่าคุณมีแผนที่จะอัปเกรดระบบของคุณตามนั้นในกรณีที่คุณยังไม่ได้ดำเนินการ
คุณสมบัติใหม่เหล่านี้คืออะไร? นี่คือสรุปสั้น ๆ เกี่ยวกับคุณลักษณะสำคัญของ Rails 6 ที่คุณน่าจะใช้ในการก้าวไปข้างหน้า:
อย่างมืออาชีพ นักพัฒนา Ruby on Rails เรามุ่งมั่นที่จะรับประกันความครอบคลุมสูงสุดสำหรับรหัสของเรา อย่างไรก็ตามการทดสอบจะกลายเป็นกิจกรรมที่น่าเบื่อเมื่อกรณีทดสอบของเรา 'หนัก' และเราต้องรอหลายนาทีหรือหลายชั่วโมงเพื่อให้กรณีทดสอบดำเนินการ
Rails 6 มีคำตอบที่นี่ ได้เพิ่ม parallelize
วิธีการ ActiveSupport::TestCase
ซึ่งช่วยให้คุณสามารถขนานชุดทดสอบด้วยกระบวนการแยก
ดังนั้นสิ่งที่คุณต้องทำเพื่อทำให้กระบวนการสำหรับการทดสอบของคุณขนานกันคือเพิ่มสิ่งนี้ใน test_helper.rb
ของคุณ:
parallelize(workers: 2)
หรือเราสามารถแทนที่คำสั่งที่ใช้ก่อนหน้านี้สำหรับการเรียกใช้การทดสอบ ตัวอย่างเช่น bin/rails test OR bin/rspec spec
ตอนนี้สามารถแทนที่ด้วย PARALLEL_WORKERS=15 rails test OR PARALLEL_WORKERS=15 rspec spec
ดังนั้นคุณสามารถเปลี่ยนคำสั่งสำหรับเรียกใช้ชุดทดสอบบนแพลตฟอร์ม CI ต่างๆเช่น Travis, Gitlab, CircleCI และอื่น ๆ
คอร์ปอเรชั่น กับ ค คอร์ปอเรชั่น คืออะไร
นอกจากนี้ยังมีตะขอเมื่อแต่ละกระบวนการถูกสร้าง / ทำลายซึ่งสามารถใช้ได้ดังนี้:
class ActiveSupport::TestCase parallelize_setup do |worker| # setup databases end parallelize_teardown do |worker| # cleanup databases end parallelize(workers: :number_of_processors) end
บันทึก: หากคุณต้องการเรียนรู้เพิ่มเติมคุณสามารถตรวจสอบ คู่มือราง สำหรับรายละเอียดเพิ่มเติม
เนื่องจากเรากำลังพูดถึงการทดสอบที่มีประสิทธิภาพเรามาทำความเข้าใจกันว่า Action Cable ซึ่งเป็นหนึ่งในคุณสมบัติเด่นที่สุดของ Rails 5 ได้รับการปรับปรุงอย่างไร ตอนนี้คุณสามารถทดสอบ Action Cable ได้ทุกระดับ: การเชื่อมต่อ , ช่อง และ การออกอากาศ .
การทดสอบการเชื่อมต่อ มีจุดมุ่งหมายเพื่อตรวจสอบว่ามีการกำหนดตัวระบุของการเชื่อมต่ออย่างถูกต้องหรือไม่หรือคำขอเชื่อมต่อที่ไม่เหมาะสมจะถูกปฏิเสธ:
class ApplicationCable::ConnectionTest การทดสอบช่อง สามารถเขียนเพื่อตรวจสอบว่าผู้ใช้สามารถติดตามช่องได้หรือไม่และช่องนั้นมีสตรีม:
class ChatChannelTest ออกอากาศไปยังช่อง สามารถทดสอบได้ดังนี้:
# app/jobs/chat_relay_job.rb class ChatRelayJob บันทึก: ดูเคล็ดลับเพิ่มเติมเกี่ยวกับวิธีการทดสอบได้ ที่นี่ .
การแทรกและการเพิ่มจำนวนมาก
ในบางจุดเราทุกคนต้องแทรกระเบียนหลายรายการในคราวเดียวและพบวิธีแก้ปัญหามากมายเมื่อทำเช่นนั้น Rails 6 มาพร้อมกับวิธีการใหม่นอกกรอบ - insert_all
คล้ายกับ update_all
จะไม่เริ่มการเรียกกลับใด ๆ และจะดำเนินการค้นหา SQL เพียงครั้งเดียว มีวิธีการเพิ่มเติม upsert_all
ซึ่งช่วยให้คุณสามารถใช้ไฟล์ เพิ่มการดำเนินการ ซึ่งเปิดเผยโดยฐานข้อมูลสมัยใหม่มากมายเช่น Postgres ตอนนี้คุณสามารถลดการค้นหาการแทรกของคุณและทำให้โค้ดของคุณมีประสิทธิภาพมากขึ้น นอกจากนี้บอกลาอัญมณีที่ใช้ก่อนหน้านี้เช่น activerecord-import
เดียว INSERT
แบบสอบถาม SQL จัดทำโดยวิธีการเหล่านี้และคำสั่ง SQL เดียวจะถูกส่งไปยังฐานข้อมูลโดยไม่ต้องสร้างอินสแตนซ์โมเดลหรือเรียกใช้การเรียกกลับและการตรวจสอบ Active Record นอกจากนี้ยังสามารถกำหนดเกณฑ์เมื่อคีย์หลัก - ดัชนีที่ไม่ซ้ำกันหรือข้อ จำกัด ที่ไม่ซ้ำกันถูกละเมิดโดยมีตัวเลือกในการข้ามหรือเรียกใช้การค้นหาที่เพิ่มขึ้น
ตัวอย่างบางส่วนอยู่ด้านล่าง:
result = Article.insert_all( [ { id: 1, title: 'Handling 1M Requests Per Second', author: 'John', slug: '1m-req-per-second' }, #...snip... ], returning: %w[ id title ], unique_by: :index_articles_on_title_and_author ) result = Article.upsert_all( [ { id: 1, title: 'Handling 1M Requests Per Second', author: 'John', slug: '1m-req-per-second' }, { id: 1, .... }, # duplicate 'id' here { id: 2, .... }, { id: 3, .... }, # duplicate 'title' and 'author' here { id: 4, .... }, { id: 5, .... }, # duplicate 'slug' here { id: 6, .... } ] )
วิธีการ insert
, insert!
และ upsert
เป็นห่อรอบ insert_all
, insert_all!
และ upsert_all
ตามลำดับ
บันทึก: มีบทความที่ดีมากซึ่งกล่าวถึงการสืบค้นข้อมูลจำนวนมากเกี่ยวกับฐานข้อมูลที่แตกต่างกัน หากคุณต้องการข้อมูลเพิ่มเติมโปรดตรวจสอบว่าคุณ ลองดูสิ .
การสลับระหว่างฐานข้อมูลหลายฐานข้อมูล
หนึ่งในคุณสมบัติหลักของแอพพลิเคชั่นขนาดใหญ่ที่หลายคนชื่นชอบก็คือคุณสมบัตินี้: Rails 6 ได้เพิ่มการรองรับฐานข้อมูลที่หลากหลายสำหรับแอปพลิเคชันของคุณในตัวและพร้อมใช้งานทันที!

แฮ็คหมายเลขบัตรเครดิตที่ถูกต้อง
แน่นอนว่าตัวเลือกการออกแบบยังคงเป็นของคุณไม่ว่าคุณจะต้องการแยกแอปพลิเคชันของคุณออกเป็นไมโครเซอร์วิสหลาย ๆ ตัวโดยแต่ละตัวจะมีฐานข้อมูลแยกกันหรือใช้เส้นทางเสาหินหรือเพิ่มแบบจำลองการอ่านสำหรับแอปพลิเคชันของคุณ
อย่างไรก็ตามการมีความสามารถในการทำได้ง่ายเช่นนี้มีศักยภาพในการประหยัด มาก ของเวลาในการพัฒนา
นี่คือวิธีใหม่ของคุณ database.yml
ไฟล์จะมีลักษณะ:
development: primary: database: my_primary_db user: root primary_replica: database: my_primary_db user: ro_user replica: true animals: database: my_animals_db user: root animals_replica database: my_animals_db user: ro_user replica: true
วิธีที่น่าสนใจในการระบุวิธีเปลี่ยนไปใช้ฐานข้อมูลต่างๆมีดังนี้
class AnimalsModel ที่นี่คือ หน้า GitHub อย่างเป็นทางการ ซึ่งได้รับการบันทึกไว้อย่างดีเช่นกัน โดยส่วนตัวแล้วฉันรอคอยที่จะมีความสามารถในการแบ่งฐานข้อมูลในการอัปเดต Rails ในอนาคตเช่นกัน (เช่น นี้ ).
กล่องจดหมายการดำเนินการ
คุณลักษณะ Rails 6 ที่น่าสนใจอีกประการหนึ่งคือการเพิ่ม กล่องจดหมายการดำเนินการ ซึ่งเพิ่มความสามารถให้กับ กำหนดเส้นทางอีเมลขาเข้า ไปยังคอนโทรลเลอร์เช่นกล่องจดหมายสำหรับการประมวลผลใน Rails
Action Mailbox มีทางเข้าสำหรับ Mailgun, Mandrill, Postmark และ SendGrid คุณยังสามารถจัดการกับอีเมลขาเข้าได้โดยตรงผ่านทางเข้า Exim, Postfix และ Qmail ในตัว ตอนนี้คุณสามารถจินตนาการถึงประโยชน์ที่อาจเกิดขึ้นได้โดยไม่ต้องลงรายละเอียดเพิ่มเติม อาจเป็นการประมวลผลอีเมลโดยตรงจากฝ่ายช่วยเหลือไปยังตั๋วสนับสนุนอัตโนมัติ Rails 6 ช่วยให้ลูกค้าสามารถตอบกลับโดยตรงทางอีเมลและอื่น ๆ อีกมากมาย ชั้นเปิดให้คุณสำรวจคุณลักษณะนี้และหาแนวทางที่เหมาะสำหรับการใช้งานของคุณ
นี่คือตัวอย่างเล็ก ๆ เพื่อทำความเข้าใจวิธีใช้ Action Mailbox:
COMMENTS_REGEX = /^comment+(.+)@example.com/i # app/mailboxes/application_mailbox.rb class ApplicationMailbox :comments end # app/mailboxes/comments_mailbox.rb class CommentsMailbox นอกจากนี้วิธีใหม่ในการกำหนดค่าอีเมลมีดังนี้ (โดยใช้ตัวอย่าง Sendgrid):
# config/environments/production.rb config.action_mailbox.ingress = :sendgrid
ใช้ rails credentials:edit
เพื่อเพิ่มรหัสผ่านลงในข้อมูลรับรองที่เข้ารหัสของแอปพลิเคชันของคุณภายใต้ action_mailbox.ingress_password
โดยที่ Action Mailbox จะค้นหาโดยอัตโนมัติ:
action_mailbox: ingress_password: …
กำหนดค่า SendGrid Inbound Parse เพื่อส่งต่ออีเมลขาเข้าไปยัง /rails/action_mailbox/sendgrid/inbound_emails
ด้วยชื่อผู้ใช้ actionmailbox
และรหัสผ่านที่คุณสร้างไว้ก่อนหน้านี้ หากแอปพลิเคชันของคุณอยู่ที่ https://example.com
คุณต้องกำหนดค่า SendGrid ด้วย URL ต่อไปนี้:
https://actionmailbox: [email protected] /rails/action_mailbox/sendgrid/i
ในกรณีที่คุณต้องการสำรวจเพิ่มเติม Rails มีคำแนะนำเกี่ยวกับเรื่องนี้อยู่แล้ว ที่นี่ .
Zeitwerk
Zeitwerk เป็นตัวโหลดโค้ดใหม่สำหรับ Ruby ด้วยโครงสร้างไฟล์แบบเดิม Zeitwerk จะโหลดคลาสและโมดูลของโปรเจ็กต์ของคุณตามความต้องการซึ่งหมายความว่าคุณไม่จำเป็นต้องเขียนต้องเรียกไฟล์ของคุณเอง หากต้องการเปิดใช้งานใน Rails 6 คุณสามารถดำเนินการดังต่อไปนี้:
config.autoloader = :zeitwerk
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ Zeitwerk ที่นี่ .
คำแนะนำเครื่องมือเพิ่มประสิทธิภาพ
คุณกังวลว่าข้อความค้นหาของคุณใช้เวลาดำเนินการนานเกินไปหรือไม่? ตอนนี้คุณมีวิธีกำหนดการหมดเวลาสำหรับคำถามของคุณแล้วเช่นกัน
ข้อความต่อไปนี้จะเพิ่ม StatementTimeout
ข้อยกเว้นหากแบบสอบถามใช้เวลาดำเนินการนานกว่าปกติ:
User.optimizer_hints('MAX_EXECUTION_TIME(5000)').all
รองรับโดย MySQL และคุณจะต้องสำรวจว่าฐานข้อมูลของคุณรองรับหรือไม่
ตัดทอนฐานข้อมูล
สิ่งที่เกี่ยวกับการเพาะข้อมูล? คำสั่งต่อไปนี้จะตัดทอนตารางฐานข้อมูลทั้งหมดของคุณจากนั้นคุณสามารถดำเนินการเริ่มต้นข้อมูลของคุณได้:
rails db:truncate_all
ไม่ต้องลบฐานข้อมูลของคุณเพื่อเริ่มต้นอีกต่อไป คุณอาจเห็นด้วยว่านี่เป็นวิธีแก้ปัญหาที่สวยงามและรวดเร็ว
ข้อความการดำเนินการ
บางทีคุณสมบัติที่โดดเด่นอีกอย่างสำหรับแอพพลิเคชั่นจำนวนมากที่เล่นกับโปรแกรมแก้ไขแบบ WYSIWYG คือการเพิ่มการสนับสนุนสำหรับ บรรณาธิการ Trix โดยกำเนิดในแอปพลิเคชัน Rails 6 นี่จะเป็นการอัพเกรด / เพิ่มเติมที่ดีสำหรับหลาย ๆ โครงการอย่างแน่นอน
โปรแกรมแก้ไข HTML แบบ WYSIWYG ส่วนใหญ่มีขอบเขตอย่างมาก - การใช้งานของเบราว์เซอร์แต่ละตัวจะมีชุดข้อบกพร่องและนิสัยใจคอเป็นของตัวเองและนักพัฒนา JavaScript ก็ต้องแก้ไขปัญหาที่ไม่สอดคล้องกัน Trix หลีกเลี่ยงความไม่สอดคล้องกันเหล่านี้โดยการรักษา contenteditable
เป็นอุปกรณ์ I / O: เมื่ออินพุตเข้าสู่ตัวแก้ไข Trix จะแปลงอินพุตนั้นเป็นการดำเนินการแก้ไขบนโมเดลเอกสารภายในจากนั้นแสดงเอกสารนั้นกลับเข้าไปในเอดิเตอร์อีกครั้ง สิ่งนี้ทำให้ Trix สามารถควบคุมสิ่งที่เกิดขึ้นหลังจากการกดแป้นพิมพ์ทุกครั้งได้อย่างสมบูรณ์
การติดตั้ง:
rails action_text:install # app/models/message.rb class Message คุณสามารถสำรวจ ข้อความการดำเนินการ ในรายละเอียดเพิ่มเติมในเอกสารอย่างเป็นทางการ ที่นี่ .
ความปลอดภัย
ไม่มีการอัปเกรดอย่างจริงจังเสร็จสมบูรณ์หากไม่มีการปรับปรุงความปลอดภัยเล็กน้อย Rails 6 ก็ไม่ทำให้ผิดหวังในด้านการรักษาความปลอดภัยเช่นกัน การอัปเกรดความปลอดภัยครั้งแรกที่โดดเด่นคือการเพิ่มการสนับสนุนสำหรับ การอนุญาตโฮสต์ .
Host Authorization คือมิดเดิลแวร์ใหม่ที่ป้องกัน DNS rebinding การโจมตีโดยอนุญาตอย่างชัดเจนโฮสต์สามารถส่งคำขอไปยัง สิ่งนี้หมายความว่าคุณสามารถกำหนดโฮสต์ที่สามารถเข้าถึงแอปพลิเคชันของคุณได้
การอัปเกรดการรักษาความปลอดภัยอีกครั้งมีจุดมุ่งหมายเพื่อป้องกันการโจมตีที่พยายามคัดลอกค่าที่ลงชื่อ / เข้ารหัสของคุกกี้และใช้เป็นมูลค่าของคุกกี้อื่น ทำได้โดยการซ่อนชื่อคุกกี้ในช่องวัตถุประสงค์ซึ่งจะถูกเซ็น / เข้ารหัสพร้อมกับค่าคุกกี้ จากนั้นในฝั่งเซิร์ฟเวอร์จะอ่านเราตรวจสอบชื่อคุกกี้และทิ้งคุกกี้ที่ถูกโจมตี เปิดใช้งาน action_dispatch.use_cookies_with_metadata
เพื่อใช้คุณลักษณะนี้ซึ่งเขียนคุกกี้ด้วยวัตถุประสงค์ใหม่และฝังข้อมูลเมตาที่หมดอายุไว้
Webpack เป็น Bundler เริ่มต้น
ตามที่เป็นมาตรฐานโดยพฤตินัยที่มีเฟรมเวิร์ก JavaScript ที่ทันสมัยมากมายสำหรับการพัฒนาส่วนหน้า Rails 6 ได้เพิ่ม Webpack เป็นชุดรวม JavaScript เริ่มต้นผ่านอัญมณีของเว็บแพ็กเกอร์แทนที่ไปป์ไลน์ Rails Asset นี่เป็นการเพิ่มเติมที่ค่อนข้างตรงไปตรงมาและเราจะไม่ลงรายละเอียดมากนัก พอจะกล่าวได้ว่า Webpack จะช่วยบรรเทาให้กับนักพัฒนาส่วนหน้าที่ทำงานหนักเกินไป
การป้องกันสภาพการแข่งขัน
Rails 6 มีวิธีการใหม่ที่ใช้เพื่อป้องกันเงื่อนไขการแข่งขัน SELECT / INSERT ในโค้ดของเรา (ฉันแน่ใจว่าผู้อ่านหลายคนมีความโชคร้ายที่ต้องเผชิญกับสภาพการแข่งขันขณะที่พวกเขาปรับขนาดโครงการของพวกเขา) ที่นี่คือ เธรด GitHub ในกรณีที่คุณต้องการข้อมูลเพิ่มเติม
ตารางพื้นฐานต้องมีคอลัมน์ที่เกี่ยวข้องที่กำหนดด้วยข้อ จำกัด เฉพาะ แม้ว่าเราจะหลีกเลี่ยงเงื่อนไขการแข่งขันระหว่าง SELECT → INSERT จาก #find_or_create_by
แต่จริงๆแล้วเรามีเงื่อนไขการแข่งขันระหว่าง INSERT → SELECT ซึ่งสามารถทริกเกอร์ได้หากการลบระหว่างสองคำสั่งนั้นถูกเรียกใช้โดยไคลเอนต์อื่น แต่สำหรับแอปพลิเคชันส่วนใหญ่นั่นเป็นเงื่อนไขที่เรามีโอกาสโดนน้อยมาก
ข้อมูลรับรองใน Rails 6
ตั้งแต่สมัยของ Rails 5.2 ข้อมูลประจำตัวได้รับการตั้งชื่อใหม่ว่า 'Rails way' เพื่อจัดการกับข้อมูลที่ละเอียดอ่อนพร้อมสัญญาว่าจะกำจัดสิ่งที่น่าอับอาย .env ไฟล์ครั้งแล้วครั้งเล่า ด้วยข้อมูลรับรองคีย์ที่เข้ารหัสสำหรับบริการของบุคคลที่สามสามารถตรวจสอบได้โดยตรงในตัวควบคุมต้นทาง
อย่างไรก็ตามจนถึงตอนนี้ Rails ใช้ไฟล์เข้ารหัสเดียวกันสำหรับทุกสภาพแวดล้อมซึ่งทำให้การจัดการกับคีย์ที่แตกต่างกันในการพัฒนาและการผลิตเป็นเรื่องยุ่งยากเล็กน้อยโดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับโปรเจ็กต์ขนาดใหญ่และรหัสเดิม
ใน Rails 6 สิ่งนี้ได้รับการแก้ไขในที่สุดด้วยการรองรับข้อมูลประจำตัวต่อสภาพแวดล้อม อีกครั้งรายละเอียดเพิ่มเติมสามารถสำรวจได้อย่างเป็นทางการ เธรด GitHub .
Rails 6 เป็นการอัพเดทที่ดีหรือไม่?
ใช่และในความเป็นจริง Rails 6 สามารถอธิบายได้ว่าเป็นการอัปเดตที่สำคัญแม้ว่าจะมีเพียงไม่กี่คนที่เรียกมันว่าตัวเปลี่ยนเกม เนื่องจาก Ruby on Rails มีมานานหลายปีแล้วจึงมีคนเพียงไม่กี่คนที่คาดหวังการเปลี่ยนแปลงในเชิงปฏิวัติ แต่การเกิดใหม่ครั้งที่หกของมันนำมาสู่ตารางมากมาย
คุณลักษณะบางอย่างที่เปิดตัวใน Rails 6 ดูเหมือนเป็นการปรับปรุงเล็กน้อยในขณะที่คุณสมบัติอื่น ๆ มีศักยภาพในการประหยัดเวลาในการพัฒนาได้มากปรับปรุงความปลอดภัยความแข็งแกร่งและอื่น ๆ บรรทัดล่าง: รางเป็นผู้ใหญ่ นักพัฒนาจำนวนมากยังคงกระตือรือร้นเกี่ยวกับอนาคต และด้วยการเปิดตัว Rails 6 มันก็ดีขึ้นกว่าเดิม
แน่นอนว่ารายการคุณลักษณะของ Rails 6 นี้ไม่สมบูรณ์และหากต้องการดูชุดการเปลี่ยนแปลงทั้งหมดคุณต้องตรวจสอบบันทึกการเปลี่ยนแปลง นอกจากนี้ยังมีการเลิกใช้งานจำนวนมากที่คุณควรพิจารณา สุดท้ายหากคุณยืนยันที่จะดำเนินการเปลี่ยนแปลงทุกอย่างและอัปเดตตัวเองโปรดอ่านไฟล์ บันทึกประจำรุ่นฉบับเต็ม .
ทำความเข้าใจพื้นฐาน
Ruby on Rails ยังคงมีความเกี่ยวข้องในปี 2019 หรือไม่?
Rails มีความเกี่ยวข้องมากกว่าโซลูชันอื่น ๆ ในตลาด Rails และ Ruby กำลังอัพเกรด (Matz กำลังทำให้ Ruby 3X เร็วขึ้น) Rails 6 นำเสนอเทคนิคง่ายๆในการปรับขนาดแอปพลิเคชันของคุณโดยกำเนิด และยังคงเป็นตัวเลือกที่เชื่อถือได้โดยผู้เล่นรายใหญ่หลายรายเช่น Github, Shopify, Basecamp และอีกมากมาย
สื่อดิจิทัล vs การออกแบบกราฟิก
ฉันควรใช้ Rails หรือไม่?
คำตอบขึ้นอยู่กับกรณีการใช้งานของคุณ ยังคงเป็นเฟรมเวิร์กที่ดีที่สุดสำหรับเว็บอีคอมเมิร์ซการจัดการเนื้อหาและแอปพลิเคชันประเภทอื่น ๆ อีกมากมาย นอกจากนี้ยังช่วยลดเวลาในการพัฒนา MVP และเป็นตัวเลือกที่ยอดเยี่ยมเมื่อคุณไม่มีแนวคิดที่ตายตัวหรือต้องการต้นแบบที่รวดเร็วสำหรับแอปพลิเคชันของคุณ
Upsert หมายถึงอะไร?
Upsert คือการดำเนินการฐานข้อมูลซึ่งหมายความว่าขึ้นอยู่กับแอตทริบิวต์ที่จัดเตรียมไว้สำหรับการดำเนินการหากมีระเบียนอยู่แล้วในฐานข้อมูลเราต้องการอัปเดตระเบียนนั้นหรือสร้างระเบียนใหม่หากไม่มีระเบียน Upsert เกิดขึ้นในธุรกรรมเดียวจึงป้องกันไม่ให้เกิดเงื่อนไขการแข่งขันในแอปพลิเคชัน
ข้อดีของการทดสอบแบบขนานคืออะไร?
เราได้เห็นโครงการที่ต้องใช้เวลาหลายชั่วโมงในการเรียกใช้กรณีทดสอบ ด้วยการเรียกใช้ชุดกรณีทดสอบในกระบวนการต่างๆเราสามารถลดระยะเวลาดำเนินการของกรณีทดสอบของเราได้ ด้วยการทดสอบแบบขนาน Rails 6 เราจะไม่ต้องพึ่งพาบริการภายนอกเพื่อทำแบบขนานกรณีทดสอบของเรา