概要
コマンド$ npx wrangler d1 execute DB名 --preview --remote --file SQLが記載されているファイル名
を実行し、プレビュー環境のD1 DBに対してSQLを実行しようと思った。エラーが出てSQLが実行できなかった。
筆者の場合の解消方法を簡単にまとめる。
エラー内容
一見無関係っぽくみえるjs(TypeScript)のコードのエラーのように思える。
✘ [ERROR] Cannot read properties of undefined (reading 'forEach')
解決方法(結論)
アプリケーションルートにて下記コマンドを実行してwrangler(CloudfrareのCLIツール)のバージョンアップを行った。
npm install wrangler@latest
$ npx wrangler d1 execute DB名 --preview --remote --file SQLが記載されているファイル名
を実行したら問題なくSQLが実行された。
解決までの経緯
-
$ npx wrangler d1 execute DB名 --preview --remote --file SQLが記載されているファイル名
を実行したらプレビューのD1 DBに対してSQLが実行できずエラー発生 -
$ npx wrangler d1 execute DB名 --local --file SQLが記載されているファイル名
を実行したら問題なくローカルのDBに対してSQLを実行できた -
$ npx wrangler d1 migrations apply DB名 --preview --remote
は問題なくコマンドの実行そのものはできた(マイグレーション対象記載がなかったのでマイグレーションそのものは行われなかった) - 確かにコード上にいくつか「forEach」の記載はあるのでコメントアウトして
$ npx wrangler d1 execute DB名 --preview --remote --file SQLが記載されているファイル名
を実行したらプレビューのD1 DBに対してSQLが実行できずエラー発生 -
$ npx wrangler d1 execute DB名 --preview --remote --command "SELECT * FROM テーブル名;"
は問題なく実行でき、プレビュー用D1のテーブルの情報が取得できた - wranglerコマンド実行する都度「⛅️ wrangler 3.57.1 (update available 3.81.0)」と出力されていることに気がつく
-
$ npm install wrangler@latest
を実行してwranglerのバージョンアップを実施
筆者の場合の問題
npxコマンドには実行の優先順位があることを知らなかった。
Remix ✕ Cloudflare環境構築直後ではnpxでwranglerコマンドを実行していたが、途中でwranglerをローカルにnpm installしていた。このタイミングから「npx使っているが、リモートへ取りに行かないでローカルのwranglerを使ってコマンドを実行」していた。これは初期こそ問題なかったが、wranglerのバージョンが上がって行くにつれてうまく動作しなくなった。
npxを使っているのでwranglerの最新バージョンを使っていると筆者が思い込んでいたため発見に時間がかかった。
参考文献