ในโพสต์ชุดนี้ เราจะดูที่ 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 สองสามแบบ:

เพื่อเป็นการสรุปคร่าวๆ แอปของเราจะครอบคลุมขั้นตอนต่อไปนี้:
- ผู้ใช้อัปโหลดรูปภาพพร้อมข้อความ (เราจะแสดงเทคนิค SQLite ขั้นสูงบางอย่างที่นี่)
- ผู้ใช้เลือกสไตล์ภาพ (เช่น "การ์ตูน" "ภาพวาดสีน้ำมัน" "เหมือนจริง" "การเรนเดอร์ 3 มิติ")
- การประมวลผลเกิดขึ้นในเบื้องหลัง (ซึ่งจะเริ่มต้น LiteJob -งานขับเคลื่อน)
- ในขณะที่ดำเนินการประมวลผล เราจะแสดงรูปภาพตัวยึดตำแหน่งและอัปเดตบันทึกที่เซิร์ฟเวอร์ส่งไป เมื่อเสร็จแล้วเราจะอัพเดตให้แสดงภาพจริง ซึ่งช่วยให้เราสามารถสำรวจ LiteCable ได้ ในขณะที่เราแทนที่รูปภาพด้วย Turbo Streams
- เราจัดเก็บการทำนายภาพ
- เราใช้ 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 ของเรา . ขั้นตอนการทำงานทั่วไปจะเป็นดังนี้:
- เราดึงข้อมูลโมเดล (ในกรณีของเราคือ
154model) จาก Replicate - เราคว้าเวอร์ชันเฉพาะ (ในกรณีของเรา คือเวอร์ชันล่าสุด) เพื่อดำเนินการคาดการณ์
- เราดำเนินการทำนาย โดยระบุ:
- ข้อความแจ้งที่อธิบายรูปภาพ (ในกรณีของเราคือชื่อข้อความแจ้งของเรา)
- ข้อความแจ้งรูปภาพที่เราต้องระบุเป็น 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 ของเราและไม่พลาดแม้แต่โพสต์เดียว! ป>