Remix + Cloudflare Workers + D1 + KV + Queue + R2で簡単なアプリを作る
Remix + Cloudflare Workers + D1 + KV + Queue + R2 + DOで簡単なアプリを作る
Zennに清書した
Remix + Cloudflare Pages + D1 + KV + Queue + R2で簡単なアプリを作るではやや失敗したのでWorkersを使って作り直す。最初の工程と本番工程以外は何も変えずに動いた。
code:sh
npx create-remix@latest
code:.gitignore
.DS_Store
node_modules
/.cache
.dev.vars
/public/build
/build
.vscode
.wrangler
Cron Triggerを追加する
Cron Triggers · Cloudflare Workers docs
Setting Cron Triggers · Cloudflare Workers docs
アプリ的には使う場所がないけどCron Triggerも試しておきたいので追加。構造としてはQueueと同じ。ハンドラをapp/に作ってserver.tsに追加するだけ。cronのパターンはwrangler.tomlに追加すればOK。
code:server.ts
import { scheduled } from "~/cron/scheduled";
...
queue,
scheduled, <- 追加
}
code:wrangler.toml
triggers
crons = "0 0 1 1 *"
env.dev.triggers
crons = "0 * * * *"
以下でテスト実行できる。
code:sh
npm run dev
curl "http://localhost:8787/__scheduled?cron=0+*+*+*+*"
本番環境で動かす
wrangler.tomlに必要情報を記載し、account_idも記載できたらあとはnpm run deployをするだけ。Pagesと違いWorkersは手動でD1やKVのネームスペースを設定しなくて良い。ただし秘匿情報の環境変数はマニュアルで設定しないといけない(見えてもいいやつならwrangler.tomlに[vars]と書いておけば設定される)。
デバッグ
下記のコマンドでFunctionsへのリクエストのログが見られる。
code:sh
npx wrangler tail remix-workers-bookmark
特に問題なく動いた。
CI
Create API token · Cloudflare Fundamentals docs
Deploy to Cloudflare Workers with Wrangler · Actions · GitHub Marketplace
問題
DrizzleORM or Kitが生成するmigrationファイルにIF NOT EXISTSをつけてくれないからCIにmigrations applyを含めると二回目でこける。
SQL query to create table is missing "IF NOT EXISTS" · Issue #622 · drizzle-team/drizzle-orm
リンク