sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

適切なエラーを出しましょう

  CMS

ogochan

CultureSquareでソフト紹介をするページを作りたいなと考えて、CMSに手を入れることを考えました。

その前にとりあえず先日mayumiが対応したCMSの版をローカルに持って来てDBの変更も対応しようと

$ npx sequelize-cli db:migrate

としようとしたら、

Sequelize CLI [Node: 20.10.0, CLI: 6.6.1, ORM: 6.32.1]

ERROR: Error reading "config/config.json". Error: SyntaxError: Unexpected token ':'

とか言うわけです。

起きたこと

git updateをして手元のソースを最新にします。そして、ローカルブランチを作る。まぁここは普通の話ですね。

手元にDBがなかったので運用しているサーバからダンプを取って来てDBを作る。うっかりしていたのですが、ローカル環境をラズパイからOrange Piにした時にDBは「どうせ開発用だし」ってことで移行しなかったんですね。だから、作り直すことに。まぁこれも普通の話です。

そして、最新のソースに合わせてdb:migrateする。元々のDBはRailsで作ったものだったのでそれを移行して作ったDBだったので、ローカルではdb:migrateしたことがなかったのです。そこで初めてdb:migrateをするわけですが、問題は元々が動いていたはずのconfig/config.jsonです。db:migrateすると、

Error: SyntaxError: Unexpected token ':'

とか言われても、「知らんがな」としか言いようがないわけです。何しろ元々は動いていたJSONですから、今さら「コロンがない」とか言われても、意味がわかりません。もちろんあらためてconfig/config.jsonを見てもJSON的におかしい箇所はありません。そもそも、元々動いていたわけですし。

原因

例によってgdgd書く前にわかった結果だけ出しておきます。これは

config/config.jsonがシンボリックリンクだった

ことによって起きたエラーです。

元々、環境をスイッチできるように、config/config.jsonを別名で定義しておいて、使うものはconfig/config.jsonという名前で参照できるようにしてたのですが、これがダメだったようです。Railsで似たようなことをしていましたし、前は問題なかったような気がしているので、比較的最近このチェックがされるようになったようです。

これも以前書いた

Node.jsでport 80を開こうとするとEACCESSになる

と同様に、ググって出て来る情報は

「おめーがJSON間違えてんだろ、ボケ」

みたいな上メセの話ばかりで、実際の役に立つ情報は全くありません。なんでネットの「サポータ」ってこうなんでしょうね。いつも素人が質問してるわけじゃないんだけどなぁ。

とにかく、config/config.jsonはシンボリックリンクだと謎なエラーになってしまうというのが事実です。

背景

これは他のものでもしばしばあるもので、要するにセキュリティ対策の一つです。認証やセキュリティに絡む設定をシンボリックリンクにしてあるのは、時としてセキュリティ問題を起こします。この分野は素人なので、現在現実にそれが問題となることが起きるかどうかは知らないのですが、少なくともかつてはこの辺がシンボリックリンクであったことが原因で穴を作ってしまったという事例があったので、DBに対する認証情報の入っているconfig/config.jsonもシンボリックリンクだとエラーにしたのでしょう。

文句

というのはわかってみれば適当に納得できるのですが、

ERROR: Error reading "config/config.json". Error: SyntaxError: Unexpected token ':'

というエラーはいただけません。実際、「:」は何の問題も起こしてないわけで。

多分、読み込みルーチンのエラーのステータスの返し方がどうこうみたいな事情があるんでしょうが、どんなエラーかわかっているはずなんだから、それはちゃんと伝播させて欲しいところですね。

最近のエントリー

404 WASP not found

第12回 「パーソナルサーバ」について考える

Jar Gardenに植物を植える

新しいお友達

Google翻訳、ChatGPT、Gemini...

Node.jsでGemini 1.5 FlashをAPI経由で使う

今日は「ぴろろんの日」

Node.jsでGPT-4oをAPI経由で使う

遠隔手話通訳実験

LLMと戯れてみる

新刊情報の収集

最近のできごと

Hieronymusのインボイス番号対応について

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す