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

LiteStack สำหรับ Ruby on Rails:โซลูชันการจัดการข้อมูลแบบครบวงจร

ในโพสต์ชุดนี้ เราจะดูที่ LiteStack ซึ่งเป็นโซลูชันครบวงจรที่โฮสต์และประมวลผลข้อมูลการผลิตทั้งหมดของคุณบนเครื่องเดียว LiteStack (ตามชื่อที่แนะนำ) ใช้ SQLite เพื่อจัดเตรียม:

  • ฐานข้อมูลที่ใช้ LiteDB อะแดปเตอร์
  • แบ็กเอนด์ ActiveJob (LiteJob )
  • แบ็คเอนด์ ActionCable (LiteCable )
  • ที่เก็บ ActiveSupport::Cache (LiteCache )

ในโพสต์แรกนี้ เราจะแนะนำพื้นฐานของ LiteStack และตั้งค่าตัวอย่างแอปพลิเคชัน Rails

เริ่มกันเลย!

บทนำสู่ SQLite

SQLite นั้นเป็นฐานข้อมูลแบบฝังตัวของหลายอุตสาหกรรมมานานหลายทศวรรษ ตัวอย่างเช่น มีการใช้กันอย่างแพร่หลายในการพัฒนาแอปเนทีฟ สภาพแวดล้อมการทดสอบ แคช และอื่นๆ

อย่างไรก็ตาม เมื่อเร็วๆ นี้ ได้มีการดึงดูดการทดลองและการต่อยอดมากมาย หนึ่งในส่วนขยายที่ได้รับความนิยมมากที่สุดคือ Litestream ซึ่งสามารถกู้คืนการเปลี่ยนแปลงสตรีมไปยังบัคเก็ตที่เข้ากันได้กับ S3 ซึ่งหมายความว่าคุณจะได้รับสำเนาฐานข้อมูลที่ใช้งานจริงของคุณในราคาที่ถูกมาก และสามารถกู้คืนจากความล้มเหลวได้ตลอดเวลา

บังเอิญ สิ่งนี้ทำให้การใช้ SQLite เป็นฐานข้อมูลการผลิตสำหรับแอป Rails ของคุณเป็นตัวเลือกที่เป็นไปได้ เมื่อรวมกับสแต็กการพัฒนาที่ครบครันเช่น LiteStack ก็สัญญาว่าจะทำให้แอปที่โฮสต์บนเครื่องเดียวเป็นจริง เรามาที่นี่เพื่อทดสอบสมมติฐานนี้และชี้ให้เห็นอุปสรรคที่ขวางทาง

ในการดำเนินการนี้ เราจำเป็นต้องมีแอปตัวอย่างที่ซับซ้อนพอที่จะระบุถึงปัญหาที่อาจเกิดขึ้น แต่ก็ง่ายพอที่จะทำให้เหมาะกับซีรีส์นี้

แอปพลิเคชัน Rails ตัวอย่างของเรา

เราจะเขียนแอปที่แปลงภาพวาดของเด็ก ๆ โดยใช้ StableDiffusion บน replate.com

ตัวอย่างเช่น นี่คือตุ๊กตาหมีน่ารักที่ลูกสาวของฉันวาด โดยมีการตีความ StableDiffusion สองสามแบบ:

LiteStack สำหรับ Ruby on Rails:โซลูชันการจัดการข้อมูลแบบครบวงจร

เพื่อเป็นการสรุปคร่าวๆ แอปของเราจะครอบคลุมขั้นตอนต่อไปนี้:

  1. ผู้ใช้อัปโหลดรูปภาพพร้อมข้อความ (เราจะแสดงเทคนิค SQLite ขั้นสูงบางอย่างที่นี่)
  2. ผู้ใช้เลือกสไตล์ภาพ (เช่น "การ์ตูน" "ภาพวาดสีน้ำมัน" "เหมือนจริง" "การเรนเดอร์ 3 มิติ")
  3. การประมวลผลเกิดขึ้นในเบื้องหลัง (ซึ่งจะเริ่มต้น LiteJob -งานขับเคลื่อน)
  4. ในขณะที่ดำเนินการประมวลผล เราจะแสดงรูปภาพตัวยึดตำแหน่งและอัปเดตบันทึกที่เซิร์ฟเวอร์ส่งไป เมื่อเสร็จแล้วเราจะอัพเดตให้แสดงภาพจริง ซึ่งช่วยให้เราสามารถสำรวจ LiteCable ได้ ในขณะที่เราแทนที่รูปภาพด้วย Turbo Streams
  5. เราจัดเก็บการทำนายภาพ
  6. เราใช้ LiteCache เพื่อสรุปการดูที่มีค่าใช้จ่ายสูงในการคำนวณ

ขั้นตอนเหล่านี้เป็นแนวทางสำหรับซีรี่ส์นี้ อย่างไรก็ตาม ส่วนที่เหลือของโพสต์นี้จะเกี่ยวข้องกับการตั้งค่าแอป

เราเริ่มต้นด้วยการสร้างแอป Rails ใหม่ชื่อ skAItch โดยใช้ esbuild เป็นตัวรวม JavaScript ของเรา และ SASS เป็นตัวประมวลผลล่วงหน้า CSS:

 

ติดตั้ง LiteStack

ต่อไป เราจะติดตั้ง LiteStack โดยใช้ตัวสร้างที่จัดส่งมา:

 

หลังจากเสร็จสิ้น เราจะตั้งค่าให้เสร็จสิ้นและเริ่มเซิร์ฟเวอร์การพัฒนา:

 

การรับรองความถูกต้องและผู้เช่า

ต่อมา เราต้องการวิธีตรวจสอบสิทธิ์ผู้ใช้ของเราเพื่อเชื่อมโยงกับข้อความแจ้ง แทนที่จะใช้ผู้ดำรงตำแหน่งเช่น Devise ฉันเลือกที่จะใช้แนวทางที่แตกต่างออกไป gem การรับรองความถูกต้องเป็นศูนย์สามารถสร้างระบบการรับรองความถูกต้องได้อย่างยืดหยุ่น แทนที่จะรวมไว้เป็นกลไก สะดวกสบาย โดยมาพร้อมกับตัวเลือกต่างๆ เช่น:

  • การรับรองความถูกต้องด้วยโทเค็น (สำหรับ API)
  • การตรวจสอบสิทธิ์แบบสองปัจจัย
  • การเช่าหลายรายการ
  • การจำกัดอัตรา
  • อินเทอร์เฟซ OmniAuth
  • การตรวจสอบสิทธิ์แบบไร้รหัสผ่าน

ฉันเลือกที่จะเพิ่ม 07 เนื่องจากเป็นความคิดที่ดีเสมอที่จะกำหนดขอบเขตบันทึกฐานข้อมูลของคุณไปยังบัญชีโดยอัตโนมัติ Authentication-zero ให้สิ่งนี้ด้วย 12 ข้อกังวลของโมเดล

 

มาเพิ่มผู้ใช้รายแรกผ่านทางฐานข้อมูลเมล็ด:

 

นั่งร้านพร้อมท์

ตอนนี้ถึงเวลาที่จะเริ่มเขียนตรรกะของแอปพลิเคชันจริงของเราแล้ว เราเริ่มต้นด้วยการกำหนดโมเดลหลักของแอปของเรา:20 .

เราต้องการให้ข้อความแจ้งของเรามีชื่อ คำอธิบาย และการอ้างอิงถึงบัญชีที่สร้างมันขึ้นมา นอกจากนี้ เพื่อทดสอบความสามารถ "ระบบไฟล์" ของ SQLite เราต้องการให้จัดเก็บอิมเมจพร้อมท์ในรูปแบบไบนารี่:

 

39 รายการทรัพยากรจะถูกเพิ่มใน 48 ด้วย . โปรดทราบว่าการรับรองความถูกต้องเป็นศูนย์จะเพิ่ม 52 ตรวจสอบสิทธิ์ผู้ใช้เป็น 61 โดยค่าเริ่มต้น

 

นอกจากนี้ เรายังรวม 75 ไว้ด้วย ข้อกังวลในรูปแบบพร้อมท์ของเรา ซึ่งช่วยให้เราสามารถกำหนดขอบเขตบันทึกที่เก็บไว้ตามบัญชีที่เข้าสู่ระบบ นอกจากนี้เรายังตรวจสอบด้วยว่ามีชื่อเรื่องและรูปภาพพร้อมท์

 

ขั้นตอนสุดท้ายในการเปิดใช้งานการเช่าหลายรายการ เราต้องเชื่อมต่อพรอมต์กับบัญชีเมื่อสร้างขึ้น เราทำสิ่งนี้ใน 80 :

 

การเชื่อมต่อแอปพลิเคชัน Rails ของเรากับ Replicate.com

Replicate.com เป็นแพลตฟอร์มชั้นนำสำหรับการเรียกใช้การคาดการณ์ AI บนกราฟิกการ์ดประสิทธิภาพสูง โดยมี API เพื่อสร้างการคาดการณ์ ฝึกและจัดเก็บโมเดล ฯลฯ หากต้องการใช้งาน คุณต้องได้รับโทเค็น API จาก https://replicate.com/account/api-tokens

หมายเหตุ: การเรียกใช้การคาดการณ์บน Replicate อาจมีการเรียกเก็บเงิน

โชคดีสำหรับเรามีไคลเอนต์ที่เป็นทางการและไม่เป็นทางการที่เชื่อมต่อกับ API wrapper หนึ่งอันคือ Replicate-Rails gem ซึ่งเราจะติดตั้งตอนนี้:

 
 

เพื่อจัดเก็บคีย์ API ของเราอย่างปลอดภัย เราจะใช้ข้อมูลรับรอง Rails:

 
 

การแก้ไขและบันทึกไฟล์นี้จะเข้ารหัสข้อมูลรับรองของคุณ และสามารถเปิดได้โดยการระบุ 94 ที่ถูกต้องเท่านั้น .

ตอนนี้เราต้องนำมันไปใช้ ตามที่แนะนำใน README ของ Replicate-Rails เราจะตรวจสอบความถูกต้องกับ Replicate ในเครื่องมือเริ่มต้น นอกจากนี้เรายังกำหนด webhook handler ซึ่ง (ในกรณีของเรา) เป็นเพียงคลาสที่ใส่ไว้ในไฟล์เดียวกัน โปรดทราบว่าฉันได้เพิ่ม 105 เบรกพอยต์ที่นี่เพื่อทดสอบฟังก์ชันการทำงานของเราครั้งแรก

 

Replicate-rails ยังจัดส่งตัวควบคุม webhook เริ่มต้นซึ่งเรียกตัวจัดการด้านบน เราเพียงแค่ต้องเมานต์มันใน 115 ของเรา :

 

หากต้องการทดสอบ webhook ในเครื่อง คุณต้องตั้งค่าทันเนลด้วย Ngrok เป็นต้น ขั้นตอนในการตั้งค่าอยู่นอกเหนือขอบเขตของบทความนี้ แต่ค่อนข้างง่าย โปรดดูเอกสาร Ngrok

อย่างไรก็ตาม คุณต้องบอก Rails ว่าอาจฟัง URL อุโมงค์ของคุณ หากต้องการเปิดใช้งาน ให้เพิ่มลงใน 127 ใน 138 :

 

การเรียกใช้การคาดการณ์

ตอนนี้เราจะทดสอบการสร้างการทำนาย บิตที่ขาดหายไปเพียงอย่างเดียวคือเชื่อมต่อเข้ากับ 140 ของเรา . ขั้นตอนการทำงานทั่วไปจะเป็นดังนี้:

  1. เราดึงข้อมูลโมเดล (ในกรณีของเราคือ 154 model) จาก Replicate
  2. เราคว้าเวอร์ชันเฉพาะ (ในกรณีของเรา คือเวอร์ชันล่าสุด) เพื่อดำเนินการคาดการณ์
  3. เราดำเนินการทำนาย โดยระบุ:
    • ข้อความแจ้งที่อธิบายรูปภาพ (ในกรณีของเราคือชื่อข้อความแจ้งของเรา)
    • ข้อความแจ้งรูปภาพที่เราต้องระบุเป็น URL ข้อมูลที่เข้ารหัส Base64
    • เว็บฮุคที่จะ ping เมื่อการคาดการณ์เสร็จสิ้น (เราชี้ไปที่เส้นทางเว็บฮุคที่จัดทำโดย Replicate-Rail)
 

หากคุณไปที่ https://YOUR_NGROK_URL/prompts/new และอัปโหลดภาพพร้อมชื่อ คุณจะเรียกใช้การคาดการณ์ เมื่อเสร็จแล้วมันจะโทรกลับผ่าน webhook ที่ให้ไว้ เพราะเราตั้งค่า 165 เบรกพอยต์ตรงนั้น การทำงานของคอนโทรลเลอร์จะหยุดใน REPL และเราสามารถดูรอบๆ ได้:

 

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

ถัดไป:เจาะลึก LiteDB

ในโพสต์เปิดนี้ เราได้แนะนำสภาพแวดล้อม LiteStack เป็นทางเลือกที่น่าสนใจในการโฮสต์ส่วนประกอบของแอป Rails ทั้งหมดของคุณบนเครื่องเดียว นอกจากนี้เรายังได้ตั้งค่าแอปตัวอย่างที่พูดคุยกับ Replicate.com สำหรับการสร้างภาพ AI

ในส่วนถัดไปของซีรีส์นี้ เราจะมาสำรวจองค์ประกอบแรกและองค์ประกอบหลักของ LiteStack — LiteDB - ในเชิงลึกมากขึ้น เราจะดูคุณลักษณะบางอย่างที่ทำให้มันทรงพลังอย่างมีเอกลักษณ์ ข้อผิดพลาดทั่วไป ข้อจำกัด และข้อเสีย

ถึงเวลานั้น ขอให้สนุกกับการเขียนโค้ด!

ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว!