見出し画像

【SD WebUI】"Cannot add middleware after an application has started" エラーの解決法


 なぜか突然 Stable Diffusion WebUI を起動してもすぐ停止してしまうエラーが出てしまっていたので、解決法をここに残しておきます。


File "C:\StabilityMatrix_20240129\Packages\stable-diffusion-webui\venv\lib\site-packages\starlette\applications.py", line 139, in add_middleware

raise RuntimeError("Cannot add middleware after an application has started")

RuntimeError: Cannot add middleware after an application has started

 エラーログ部分はこのようになっていました。


 このメッセージは、ウェブアプリケーションが既に開始された後にミドルウェアを追加しようとしたために発生したエラーを示しています。


 ネット上で検索したところ、解決法のようなものがいくつかありましたので、解決法をA~Cの順番でお伝えしていきます。



 Aが終わった時点で解決したなら、B以降は必要ありません

 もちろん、Bをやって解決したなら、Cは必要ありません









A: update.bat を使ってWebUIを更新する



 こちらのエラー解決メモの項目にあった方法です。

以下のリンクからWebUIをダウンロードしたユーザーが影響を受ける(「ローカル版導入」に記載された手順でインストールしたユーザーは関係ない)。
https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.0.0-pre



この配布形式はrun.batをダブルクリックするだけで実行可能にしたものであるが、様々な更新により初期状態ではエラーが発生するようになっている。

手順:
update.batをダブルクリックし、実行する。ファイルの更新が行われ、以下の画像のように「続行するにはなにかキーを押してください」と表示される。その後、run.batを実行する。


 私の場合、StabilityMatrix を使ってインストールしている為、この状況には該当しませんでしたので、この方法は行っていません。






B: 別ドライブにインストールしなおす方法



 私の場合はこちらで解決しました。
 単純に、SD WebUIを別のドライブにインストールしなおします。

 ご自身でインストールされている方は、特にご説明の必要は無いでしょう。


 ここでは、StabilityMatrix を使ってインストールしている方の場合の方法を書いておきます。




① 新環境用のフォルダの作成


 まずは、これまで使っていたのとは別のドライバに、WebUI環境をインストールするフォルダを新たに作成します。

以前はCドライブでしたが、今回はEドライブにフォルダを作成しました。





② StabilityMatrix のデータフォルダ先の設定を変更する



 StabilityMatrix のメインウィンドウからSetting(歯車アイコン)を選択し、新しいデータフォルダを選択からフォルダを選択を選んでください。



E:\StabilityMatrix_20240201

 これで今後、StabilityMatrix で新たにアプリをインストールしたりするフォルダ先が変更できました。

 これまで使っていたフォルダは変更されずに残っていますので、必要なファイルをあとあと移動する事ができるので安心してください。



 この状況から Web UI を新たにインストールし、環境を再構築していきましょう。






C: FastAPIをダウングレードする方法



 そもそも今回のエラーメッセージは、ウェブアプリケーションが既に開始された後にミドルウェアを追加しようとしたために発生したエラーを示しています。


 このエラーは、特定のバージョンの FastAPI で発生していることが報告されています。
 解決策として、FastAPIをバージョン0.90.1にダウングレードする方法があるようです。



 今回は私の環境のままで説明します。
 Stable Diffusion WebUI のフォルダの場所は各自それぞれ違うと思うので、そこはご自身で確認してコピペしなおしてください。

 今回、私の環境では以下の場所にStable Diffusion WebUI のフォルダがありました。

C:\StabilityMatrix_20240129\Packages\stable-diffusion-webui




 この場合、以下のようにコマンドプロンプトでコマンドを入力していきます。






① コマンドプロンプトを開く


 Windowsで「cmd」と検索して、コマンドプロンプト管理者として実行で開きます。

管理者として実行は、念のためです。普通に開いても問題ないとは思います。


こちらはコマンドプロンプトのが起動したウィンドウです。






② Stable Diffusionのフォルダに移動


 次に、コマンドプロンプト内で以下のコマンドを使ってStable Diffusionがインストールされているフォルダに移動します。

 フォルダの場所は、先ほど各自確認したアドレスに書き変えてください。

cd C:\StabilityMatrix_20240129\Packages\stable-diffusion-webui


 移動っていうと意味が良くわからない方もいるかと思いますが、コマンドプロンプトでの作業を実行する場所を指定するという意味合いだと思ってください。

コピペしてエンターしたところ。





③ 仮想環境をアクティブにする



 Windowsの場合は、仮想環境をアクティブにするには通常は以下のようになりますが、あなたの環境によって異なる場合があります。

.\venv\Scripts\activate

 こちらをコピペすると、文頭に(venv)がつくようになる。
 これが仮想環境が動き出した証。

動いた動いた。





④ FastAPIをダウングレード



 次に、以下のコマンドを実行して FastAPIVer0.90.1にダウングレードします。

pip install fastapi==0.90.1

 どうもこのFastAPI とやらの Verまわりが悪さしてた らしく、問題のなかった以前のVerに置き換えることで解決します。





⑤ 仮想環境を終了しておく


 以下のコードをコピペしてエンターすれば終了です。

deactivate
仮想環境、おしまい!




 Stable Diffusionを通常通りに開始
: 上記の手順を終えたら、Stable Diffusionを通常どおりに開始してみてください。


 私は最初、この方法で正常に起動するようになったのですが、数分後に再発しました。
 そのため、Bでご紹介した別ドライブへのインストールしなおしを行い、解決しました。




参考にしたサイト



該当の投稿のスクリーンショット


この記事が気に入ったらサポートをしてみませんか?