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 ':'
というエラーはいただけません。実際、「:」は何の問題も起こしてないわけで。
多分、読み込みルーチンのエラーのステータスの返し方がどうこうみたいな事情があるんでしょうが、どんなエラーかわかっているはずなんだから、それはちゃんと伝播させて欲しいところですね。