homura Docs App | Posts About Login
Ctrl+K

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 の -Ivendor より前に置く(sequel.rb が vendored 版へフォールバックする順序)。

-I gems/sequel-d1/lib -I lib -I vendor

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

できることできないこと
SQLSQLite 方言で D1 に送る(Dataset#sql で確認可能)PostgreSQL 専用方言をそのまま
非同期Dataset#all 等は Promise → __await__ で解決同期 MRI と同じ「常に Array」前提
マイグレーションRuby マイグレーションを SQL にコンパイルして applyAR の schema.rb をそのまま流用