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