difyデプロイ時にテーブルが存在しないとエラーが出ます。なぜですか?

こんにちは!@lysonober様のご指摘、誠にありがとうございます。Difyは確かにv1.10.1以降のバージョンでMySQLプロトコルデータベース(OceanBase/SeekDBを含む)のサポートを導入しました。以前提供した情報が古かったことをお詫び申し上げます。

最新の設定とエラー状況についてですが、問題は**DB_TYPE=seekdb**という設定値にある可能性が高いです。

原因分析

DifyはORMフレームワークとしてSQLAlchemyを使用しています。SeekDBを使用しているにもかかわらず、Difyの設定ファイルでは、システムがMySQLドライバー(pymysql)とダイアレクトを正しくロードするために、DB_TYPEmysql に設定する必要があります

seekdbのような非標準値を設定すると、Difyはデータベースタイプを認識できない可能性があり、初期化時のデータベースマイグレーションスクリプト(Migration)がスキップされるか、実行に失敗することになります。そのため、データベース接続は成功しても(接続記録は確認できる)、workflow_schedule_plansのようなコアビジネステーブルは作成されません。

解決策

設定を修正し、データベースを初期化するために以下の手順を試してください。

1. .env設定の変更

DB_TYPEmysql に変更します。

# 変更前
# DB_TYPE=seekdb

# 変更後
DB_TYPE=mysql

# その他は変更なし
DB_USERNAME=root
DB_PASSWORD=seekdb
DB_HOST=X.X.X.X
DB_PORT=2887
DB_DATABASE=test

2. 再起動と確認

変更後、Difyサービスを再起動します。

docker compose down
docker compose up -d

3. 手動でのマイグレーション実行(再起動後もエラーが発生する場合)

再起動後もテーブルが作成されない場合、以前のエラー状態が原因で自動マイグレーションがトリガーされなかった可能性があります。手動でマイグレーションコマンドを実行することをお勧めします。これにより、具体的なエラー詳細も確認できます。

# 1. APIコンテナに入る(コンテナ名が docker-api-1 または dify-api-1 であることを確認してください)
docker exec -it docker-api-1 /bin/bash

# 2. データベースのアップグレードを手動で実行する
flask db upgrade
  • 成功した場合:一連の Running upgrade ... ログが表示され、実行完了後、テーブル構造が作成されます。
  • 失敗した場合flask db upgrade のエラーログを貼り付けてください。これは、SeekDBが特定のSQL構文に対して互換性の問題があるかどうかを判断するのに役立ちます。

:books: ドキュメント参照:

  • 環境変数について:v1.10.1+では、DB_TYPEpostgres または mysql をサポートしています。

これで問題が解決することを願っています!