✍️

作成したmigrationファイルがCloudflare D1で実行されない時の解決法

2024/05/27に公開

背景

Cloudflare の RDB、D1をとある開発案件で使っています。実際どのように使っているか、その手順やメリット・デメリット等は別の記事で書くとして、今回はその過程で遭遇した、あるエラーとその解決方法について記載します。

技術構成と開発の流れ

  • hono
  • drizzle ORM
  • GitHub Actions
  • Cloudflare D1
  • Cloudflare Workers

で API を作成しています。この技術の羅列だけで何をしているか分かる方はいるかと思いますが、簡単に言うと、hono という Edge functinos 上で動作するフレームワーク上で、drizzle という ORM を使い Cloudflare D1 上に構築されたデータベースとやりとりをします。そして、Cloudflare Workers へのデプロイに GitHub Actions を使っている、といった仕様です。

現象

端的に言うと、作成したマイグレーションファイルを GitHub Actions で適用させようとするとエラーが発生します。

npx drizzle-kit generate:sqlite --out migrations --schema src/db

例えば上記のコマンドで作成したマイグレーションファイルを、

- name: Apply D1 migrations
  run: npx wrangler d1 migrations apply DB --env STAGING --remote
  env:
    CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
    CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
    working-directory: ./hono-app

上記の yaml に従って actions が apply をしようとすると、

[ERROR] A prepared SQL statement must contain only one statement. [code: 7500]

というエラーが発生しデータベースの変更等をで起用することができませんでした。

解決方法

結論、/* … */で囲まれた複数行のコメントアウトを削除すれば解決できました。初めはエラー文の解釈の余地に戸惑い色々試しましたが、同じ質問を公式の issues に投げている人がいて、そのコメントで解決することができました。issue はまだオープンなので解決していないと思われます。

references

プラスクラス・スポーツ・インキュベーション株式会社

Discussion