sinatra-homura
Sinatra を Opal / Workers 向けに補正するパッチと、JWT・Cron・Queues の拡張を提供します(gem 同梱 README の要約)。
概要
require 'sinatra/base'
class App < Sinatra::Base
register Sinatra::JwtAuth
# ...
end
classic スタイル(require 'sinatra' + トップレベルの get '/' do ... end)も同じく動きます。sinatra-homura は標準の Sinatra エントリポイント上で Workers ランタイムを自動配線するので、ユーザーコード側で Cloudflare 専用の require は使いません。
登録と require
アプリクラス内で register し、homura と同様に require 'sequel' 等はルート定義より前に置きます。
ERB プリコンパイル
bundle exec homura erb:compile --input views --output build/templates.rb --namespace MyTemplates
Rake 連携例は gems/sinatra-homura/templates/Rakefile.example を参照。
JWT(Sinatra::JwtAuth)
ヘッダ Authorization: Bearer … を検証し、authenticate! で 401 を返せます。トークン検証の runtime 境界は gem 側で吸収されるため、アプリコードは通常の Sinatra helper として扱えます。
Cron(Sinatra::Scheduled)
register Sinatra::Scheduled
schedule '*/5 * * * *', name: 'heartbeat' do |event|
db.execute_insert('INSERT INTO heartbeats (cron, scheduled_at) VALUES (?, ?)',
[event.cron, event.scheduled_time.to_i])
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 プロセス前提のジョブ |