homura Docs App | Posts About Login
Ctrl+K

sinatra-homura

Sinatra を Opal / Workers 向けに補正するパッチと、JWT・Cron・Queues の拡張を提供します(gem 同梱 README の要約)。

概要

require 'sinatra/cloudflare_workers'

class App < Sinatra::Base
  register Sinatra::JwtAuth
  # ...
end

登録と require

アプリクラス内で register し、homura と同様に require 'sequel' 等はルート定義より前に置きます。

ERB プリコンパイル

bundle exec cloudflare-workers-erb-compile --input views --output build/templates.rb --namespace MyTemplates

Rake 連携例は gems/sinatra-homura/templates/Rakefile.example を参照。

JWT(Sinatra::JwtAuth)

ヘッダ Authorization: Bearer … を検証し、authenticate! で 401 を返せます。トークン検証内部は JWT.decode(...).__await__ を利用(sinatra/jwt_auth.rb)。

Cron(Sinatra::Scheduled)

register Sinatra::Scheduled

schedule '*/5 * * * *', name: 'heartbeat' do |event|
  db = env['cloudflare.DB']
  db.execute_insert('INSERT INTO heartbeats (cron, scheduled_at) VALUES (?, ?)',
    [event.cron, event.scheduled_time.to_i]).__await__
end

Queues(Sinatra::Queue)

register Sinatra::Queue

consume_queue 'jobs' do |batch|
  batch.messages.each do |msg|
    # msg.body, msg.ack, msg.retry
    msg.ack
  end
end

できること / できないこと

できることできないこと
HTTPSinatra DSL でルート定義、homura と同じパッチ経由で Rack 応答MRI 固有のネイティブ拡張 gem をそのまま追加
認証JWT 拡張、Bearer 検証未検証の一般 OAuth フローをそのまま流用(要独自実装)
バックグラウンドCron / Queues の登録 DSLUnix シグナルや別 OS プロセス前提のジョブ