1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

anvil-app-serverのデータ管理について

Posted at

前書き

`anvil-app-server`でアプリが動作させられるようになったのはいいのですが、[Anvil](https://anvil.works/)のサイトで作成した`News Aggregater`アプリを動かそうとしても、すんなりとは動いてくれないようで。。。 ちょっと調査してみました。

前提

- Anvilで[News Aggregator](https://anvil.works/learn/tutorials/database-backed-apps)アプリを作成済みであること。

環境

- Ubuntu 20.04 LTS 日本語 Remix - Hyper-V マネージャー 10.0.18362.1 - anvil-app-server v1.1

News Aggregatorアプリのダウンロードと実行

アプリを作成すると、`View history`から`git clone`コマンドでダウンロードできます。

"View history"をクリックし、
anvil_newsaggrigator_download_1.png

"Clone with Git"をクリックし、
anvil_newsaggrigator_download_2.png

"git clone ssh://~"の行をコピーしてコマンドで実行。
anvil_newsaggrigator_download_3.png

git clone ssh://XXXX@anvil.works:2222/324IEWAMVBYU2Y77.git News_Aggregater

XXXXにはAnvilサイトに登録したアカウントのメールアドレスが入る。
※二要素認証を有効にしているとSSHパブリックキーを使用しないといけない為、使っている場合は一時的に二段階認証を外しておく。Gitにパブリックキー登録してあればすんなりいけると思いますが。

anvil-app-serverでアプリケーションを起動。

anvil-app-server --app News_Aggregater

http://localhost:3030にブラウザでアクセス。
anvil_app_server_url.png

でいきなりエラー。
anvil_app_server_NewsAggrigator_error.png

問題点

News Aggrigatorアプリでは記事の`category`を`categories`テーブルに予め登録し、そこから選択する方法をとっているのですが、アプリにはテーブルのデータが含まれていないため、「空のデータ」でエラーになる。

anvil-app-serverのPostgreSQLへpgadmin4でアクセス

`anvil-app-server`は独自のPostgreSQLサーバーを含んでいるので、そちらにアクセスする。
  • Username : postgres
  • Password : (anvil-app-serverを実行したディレクトリ)/.anvi-data/postgres.password内に記載
  • Port : (anvil-app-serverを実行したディレクトリ)/.anvi-data/db/postmaster.opts内に記載

が、見たところ、アプリで必要なはずのarticlesテーブルもcategoriesテーブルもなし。
anvil_db_tables.png

とりあえず、存在しているテーブルの中身を見ていくと、app_storage_tablesテーブル内にアプリで作成したテーブルの情報を発見。
anvil_db_app_storage_tables.png

また、create-anvil-appコマンドで作成できるtodoアプリを使ってデータの作成を見ていくと、app_storage_dataテーブルにデータが追加されていることが判明。
anvil_db_app_storage_tables.png

つまりどういうことか

ここまでのことから、
  • アプリで使用するテーブルの情報は、app_storage_tablesテーブルにJSON形式で格納される。
  • アプリからデータにアクセスする場合は、app_storage_tablesテーブルの情報を元に、app_storage_dataテーブルのJSON形式のデータにアクセスする。

どんなアプリを作ってもデータ層とロジック層の整合が取れるという観点では、メタテーブルを使うのは考えられなくもないですが、素人の心を挫く仕組みではあります。

その他

どのようなデータ管理なのか、少し見えてきたところで、データのインポートをしてみようと、Anvilのサイトに戻って、データのダウンロードを行ってみました。 が、ダウンロードしたデータもすんなりインポートできる内容ではありません。 今回のNews Aggrigatorの`categories`テーブルの場合、
ID name
[65114][57547127] entertainment
[65114][57547131] business
[65114][57547132] travel
[65114][57547134] sport

の様になっており、このデータをローカルDBのメタテーブルと整合が取れた形でJSON形式データを書き込まなければなりません。
※IDのカラムは「おそらく」Anvilでホストしているサーバーにデータが乗っている際の情報なのでローカルDBではあまり意味がなさそう。直感的にはテーブルIDとrowIDくらいかなという気はします。

後書き

有償プランであれば、ある程度融通がきく、とか、適切なアドバイスなりツールの利用なりがある、と想像しますが、無料プランでアプリ作って自前でホストして使うには、少々難易度高いと思います。 まあ、有償プランなら独自ドメインも設定できるようなので、そちらの使い方が本道なのでしょう。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?