Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Ruby on Rails용 LiteStack:원스톱 데이터 관리 솔루션

이번 게시물 시리즈에서는 LiteStack을 살펴보겠습니다. , 단일 시스템에서 모든 생산 데이터를 호스팅하고 처리하는 원스톱 솔루션입니다. LiteStack(이름에서 알 수 있듯이)은 SQLite를 사용하여 다음을 제공합니다.

  • LiteDB를 사용하는 데이터베이스 어댑터
  • ActiveJob 백엔드(LiteJob )
  • ActionCable 백엔드(LiteCable )
  • ActiveSupport::Cache 저장소(LiteCache )

첫 번째 게시물에서는 LiteStack의 기본 사항을 소개하고 Rails 애플리케이션 예시를 설정하겠습니다.

시작해 보세요!

SQLite 소개

SQLite 자체는 수십 년 동안 많은 산업 분야에서 선호되는 내장형 데이터베이스였습니다. 예를 들어 네이티브 앱 개발, 테스트 환경, 캐싱 등에서 널리 사용됩니다.

그러나 최근에는 많은 실험과 확장이 이루어졌습니다. 가장 널리 사용되는 확장 중 하나는 S3 호환 버킷에 대한 스트림 변경 사항을 복구할 수 있는 Litestream입니다. 즉, 매우 저렴한 가격으로 프로덕션 데이터베이스의 복제본을 얻을 수 있으며 언제든지 장애로부터 복구할 수 있습니다.

덧붙여서, 이로 인해 SQLite를 Rails 앱의 프로덕션 데이터베이스로 사용하는 것이 가능한 옵션이 되었습니다. LiteStack과 같은 본격적인 개발 스택과 결합하면 단일 시스템에서 호스팅되는 앱을 현실화할 수 있습니다. 우리는 이 가설을 테스트하고 그 과정에서 장애물을 지적하기 위해 왔습니다.

이를 위해서는 잠재적인 어려움을 드러낼 만큼 복잡하면서도 이 시리즈에 적합할 만큼 단순한 예시 앱이 필요합니다.

Rails 애플리케이션 예시

Replicate.com에서 StableDiffusion을 사용하여 어린이의 그림을 변형하는 앱을 작성하겠습니다.

예를 들어, 다음은 StableDiffusion 해석과 함께 내 딸이 그린 귀여운 테디베어입니다.

Ruby on Rails용 LiteStack:원스톱 데이터 관리 솔루션

대략적으로 우리 앱은 다음 단계를 다룰 것입니다:

  1. 사용자가 텍스트 프롬프트와 함께 이미지를 업로드합니다(여기서는 몇 가지 고급 SQLite 기술을 보여드리겠습니다).
  2. 사용자가 이미지 스타일을 선택합니다(예:'만화', '유화', '사실적', '3D 렌더링').
  3. 처리는 백그라운드에서 이루어집니다(LiteJob이 시작됨). -전원 작업).
  4. 처리가 진행되는 동안 자리 표시자 이미지가 표시되고 서버에서 전송된 로그가 업데이트됩니다. 완료되면 업데이트하여 실제 이미지를 표시합니다. 이를 통해 LiteCable을 탐색할 수 있습니다. Turbo Streams를 통해 이미지를 교체합니다.
  5. 우리는 이미지 예측을 저장합니다.
  6. 저희는 LiteCache를 사용합니다. 계산 비용이 많이 드는 뷰를 래핑합니다.

이러한 단계는 이 시리즈에 대한 발판을 제공합니다. 하지만 이 게시물의 나머지 부분에서는 앱 설정에 대해 다루겠습니다.

skAitch라는 새로운 Rails 앱을 만드는 것부터 시작하겠습니다. , esbuild를 JavaScript 번들러로 사용하고 SASS를 CSS 전처리기로 사용:

 

LiteStack 설치

다음으로, 제공된 생성기를 사용하여 LiteStack을 설치합니다:

 

완료되면 설정을 완료하고 개발 서버를 시작합니다:

 

인증 및 테넌트

이어서 프롬프트를 사용자와 연결하기 위해 사용자를 인증하는 방법이 필요합니다. 나는 Devise와 같은 기존 회사를 사용하는 대신 다른 접근 방식을 사용하기로 결정했습니다. 인증 제로 gem은 인증 시스템을 엔진으로 포함하는 대신 유연하게 생성할 수 있습니다. 다음과 같은 옵션이 제공되어 편리합니다.

  • 토큰을 통한 인증(API용)
  • 2단계 인증
  • 다중 테넌트
  • 속도 제한
  • OmniAuth 인터페이스
  • 비밀번호 없는 인증

저는 --tenantable을 추가하기로 선택했습니다. 옵션을 사용하는 것은 데이터베이스 레코드의 범위를 계정으로 자동으로 지정하는 것이 항상 좋은 생각이기 때문입니다. Authentication-zero는 AccountScoped를 통해 이를 제공합니다. 모델에 대한 관심.

 

데이터베이스 시드를 통해 첫 번째 사용자를 추가해 보겠습니다:

 

프롬프트 비계

이제 실제 애플리케이션 로직 작성을 시작할 시간입니다. 먼저 앱의 중심 모델인 Prompt을 정의하는 것부터 시작합니다. .

메시지에 제목, 설명, 메시지를 생성한 계정에 대한 참조가 포함되기를 원합니다. 게다가 SQLite의 "파일 시스템" 기능을 테스트하기 위해 프롬프트 이미지를 바이너리 형식으로 저장하고 싶습니다:

 

prompts 리소스 항목도 config/routes.rb에 추가되었습니다. . 인증 0은 before_action를 추가합니다. 사용자를 ApplicationController로 인증하는 중 기본적으로.

 

또한 AccountScoped도 포함합니다. 로그인한 계정별로 저장된 레코드의 범위를 지정할 수 있는 프롬프트 모델의 문제입니다. 또한 프롬프트 제목과 이미지가 있는지 확인합니다.

 

다중 테넌트 지원을 활성화하는 마지막 단계로 계정이 생성될 때 프롬프트를 계정에 연결해야 합니다. PromptsController에서 이 작업을 수행합니다. :

 

Rails 애플리케이션을 Replicate.com에 연결

Replicate.com은 고성능 그래픽 카드에서 AI 예측을 실행하기 위한 선도적인 플랫폼입니다. 예측 생성, 모델 교육 및 저장 등을 위한 API가 포함되어 있습니다. 이를 사용하려면 https://replicate.com/account/api-tokens에서 API 토큰을 얻어야 합니다.

참고: Replicate에서 예측을 실행하면 요금이 부과됩니다.

다행스럽게도 API와 인터페이스하는 공식 클라이언트와 비공식 클라이언트가 있습니다. 그러한 래퍼 중 하나가 지금 설치하게 될 Replicate-Rails gem입니다:

 
 

API 키를 안전하게 저장하기 위해 Rails 자격 증명을 사용할 것입니다:

 
 

이 파일을 편집하고 저장하면 자격 증명이 암호화되며 올바른 RAILS_MASTER_KEY을 제공해야만 열 수 있습니다. .

이제 우리는 그것을 활용해야 합니다. Replicate-rails의 README에 제안된 대로 초기화 프로그램에서 Replicate에 대해 인증합니다. 또한 (우리의 경우) 동일한 파일에 배치된 클래스인 웹훅 핸들러도 정의합니다. binding.irb를 추가했습니다. 기능의 첫 번째 테스트를 위한 중단점입니다.

 

Replicate-rails는 위 핸들러를 호출하는 기본 웹훅 컨트롤러도 제공합니다. config/routes.rb에만 마운트하면 됩니다. :

 

웹훅을 로컬에서 테스트하려면 예를 들어 Ngrok를 사용하여 터널을 설정해야 합니다. 설정 단계는 이 기사의 범위를 벗어나지만 매우 간단합니다. Ngrok 문서를 참고하세요.

그러나 Rails에게 터널의 URL을 수신할 수 있음을 알려주어야 합니다. 이를 활성화하려면 allowed_hosts에 추가하세요. config/application.rb에서 :

 

예측 실행

이제 예측 생성을 테스트해 보겠습니다. 유일하게 누락된 부분은 PromptsController에 연결하는 것입니다. . 일반적인 작업 흐름은 다음과 같습니다:

  1. 모델을 검색합니다(이 경우 stable-diffusion-img2img 모델)을 복제합니다.
  2. 예측을 실행할 특정 버전(우리의 경우 최신 버전)을 선택합니다.
  3. 다음을 지정하여 예측을 실행합니다.
    • 이미지를 설명하는 텍스트 프롬프트(이 경우 프롬프트 제목)
    • Base64로 인코딩된 데이터 URL로 제공해야 하는 이미지 프롬프트.
    • 예측이 완료되면 핑할 웹훅입니다(Replicate-Rails에서 제공하는 웹훅 경로를 가리킵니다).
 

https://YOUR_NGROK_URL/prompts/new로 이동하여 제목과 함께 이미지를 업로드하면 이제 예측이 실행됩니다. 완료되면 제공된 웹훅을 통해 다시 호출됩니다. binding.irb을 설정했기 때문입니다. 거기에 중단점이 있으면 컨트롤러 작업이 REPL에서 중지되고 다음을 살펴볼 수 있습니다.

 

보시다시피, 이미지 대 이미지 생성의 첫 번째 실행이 성공했습니다. 예측 모델은 생성된 이미지에 대한 URL을 반환하며, 이를 로컬에 저장하려고 합니다(이 이미지는 주기적으로 복제에서 삭제됩니다). 이에 대해서는 다음 시간에 좀 더 자세히 살펴보도록 하겠습니다.

다음:LiteDB 심층 분석

이 오프닝 포스트에서 우리는 단일 시스템에서 Rails 앱의 모든 구성 요소를 호스팅할 수 있는 흥미로운 대안으로 LiteStack 환경을 소개했습니다. 또한 AI 이미지 생성을 위해 Replicate.com과 통신하는 예제 앱을 설정했습니다.

이 시리즈의 다음 부분에서는 LiteStack의 첫 번째이자 핵심 요소인 LiteDB를 살펴보겠습니다. — 더 깊이. 우리는 이 제품을 독특하게 강력하게 만드는 몇 가지 특성, 일반적인 함정, 제한 사항 및 장단점을 살펴보겠습니다.

그때까지 즐거운 코딩 되세요!

추신 Ruby Magic 게시물이 보도되는 즉시 읽으려면 Ruby Magic 뉴스레터를 구독하고 단 하나의 게시물도 놓치지 마세요!