sequel-d1
Sequel の :d1 アダプタと、Opal / Workers 向けの接続層です。
接続
require 'sequel'
DB = nil
get '/users' do
DB ||= Sequel.connect(adapter: :d1, d1: env['cloudflare.env'].DB)
content_type 'application/json'
DB[:users].order(:id).all.__await__.to_json
end
d1: には prepare(sql) 可能なオブジェクト(D1 の Ruby ラッパ)を渡します。homura の /demo/sequel や /posts が実コード例です。
マイグレーション
bundle exec cloudflare-workers-migrate compile db/migrations
bundle exec cloudflare-workers-migrate apply --database homura-db
bundle exec cloudflare-workers-migrate apply --remote --database homura-db
データベース名は --database または環境変数 CLOUDFLARE_D1_DATABASE。Wrangler バイナリは WRANGLER_BIN または PATH の wrangler。
Opal ビルドパス
gem の lib を Opal の -I で vendor より前に置く(sequel.rb が vendored 版へフォールバックする順序)。
-I gems/sequel-d1/lib -I lib -I vendor
できること / できないこと
| できること | できないこと | |
|---|---|---|
| SQL | SQLite 方言で D1 に送る(Dataset#sql で確認可能) | PostgreSQL 専用方言をそのまま |
| 非同期 | Dataset#all 等は Promise → __await__ で解決 | 同期 MRI と同じ「常に Array」前提 |
| マイグレーション | Ruby マイグレーションを SQL にコンパイルして apply | AR の schema.rb をそのまま流用 |