🧩

ServerpodのDatabaseでミスった件(失敗学)

2023/07/07に公開

tutorialがうまくいったので

よし、自分の作りたい形でやってみよう、と思って、ずっとやってきた。
なんかいけそうな気がしていた。
けど、dataが拾えない。
endpointとprotocolを設定したら、そこからは基本自動生成なので、間違えようがない。
なのにclientErrorだという。そんなところ、自分では触っていない。
ということはFlutterからの呼び方がおかしいのか。

散々悩みまくって、ErrorLogとにらめっこの日々を過ごしたら、そもそも「そんなtableはありません」といわれているのに気づいた。ありませんって、ここにあるでしょうよ。テストデータも入ってるでしょうよ。苦労して作ったMainのtableも、中間tableも、全部「ない」ことになっている。
なんなんだこれ。
でも、tutorialで作ったProjectを走らせると、ちゃんと機能する。
この二つはどこが違うのか。

唯一、手動でやるところ

自動生成の部分がまちがっているとしたら、それは私には手の出しようのないbugだけれど、そんなissueはGitHubに上がっていないし、そもそもtutorial版はちゃんと動いているんだから、これは私のミスに違いない。

としたら、手動でやった部分だ。

Flutterのコードは目を皿にして見直したが、まちがってない(多分)。
あと可能性があるのは・・・そうだ、

serverpodで唯一、手動で設定する部分、PostgreSQLのtable作成だ。

なんでも自動でできるのに・・・

  • serverpodでProjectを作ると、server、client、flutterと三つのフォルダができる
  • docker-compose up --build --detach で 名前知らない何かが二つできる。
  • Postico2からPostgreSQLにアクセスすると、三つの「タンク」ができている。

ここに手動でテーブルを作る。
といったって、serverにできているSQL文をコピペするだけなのだ。
それだけなのだが、さて、この三つのタンクのどこにコピペするか。

正解は一番左のプロジェクト名がついているタンク。いかにも当然。

tutorialではちゃんとそこにテーブルを作った。
が、次に自力で作ったとき、真ん中のタンクに作ってしまったのだ。
なんでそうなったか、わからない。postgresって書いてあるからかな。
・・・要するに迂闊なのだ。
いったんテーブルを作ってしまうと、次からはそこが自動で開くから、
次から次と新しいテーブルを作りつづけた・・・まちがったタンクに。

復習も兼ねて、一からやり直し。

この際、table構成も見直しながら、もう一度作り直すことにした。
だいぶスムーズに、読み込んでListTileで表示、まで来た。
さあ、これからまた、がんばろう。

Flutter大学

Discussion