C#の.NET Coreで使用可能なPDF作成ライブラリをまとめました。 商用で利用できるものや、有償の物から無償なものまで幅広く紹介します。 C#用のPDFライブラリ事情について C#は.NET F…
CentOS7のApacheにホストした場合、ASPNETCORE_ENVIRONMENTによる動作モードの設定(Production・Development)はweb.configではなくサービスファイルに記載する必要があります。公式リファレンスがちょっと分かりにくくて見落としがちなので詳細を記載します。
執筆時点のASP.NET Coreのバージョンは2.1です。
web.configではない
ちょっと検索すると公式リファレンスの以下の説明が引っかかってきます。
これだけを見るとweb.configに書けばいいのかと思いますが、これはIISでホストする場合の設定です。
よく見れば「IIS での ASP.NET Core のトラブルシューティング」ページに書かれているので当然ですね。
開発環境でアプリを実行するには、
ASPNETCORE_ENVIRONMENT
環境変数を web.config に追加することができます。 アプリの起動時にホスト ビルダー上でUseEnvironment
によって環境がオーバーライドされない限り、環境変数を設定すると、アプリの実行時に開発者例外ページが表示されます。
ASPNETCORE_ENVIRONMENTがProductionの場合はエラーの詳細が表示されない
Productionは本環境向けの設定値のため、エラー発生時にはエラーの詳細内容は表示されません。
An error occurred while processing your request.
Development Mode
Swapping to Development environment will display more detailed information about the error that occurred.
Development environment should not be enabled in deployed applications, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development, and restarting the application.
上のProduction環境でエラーになった場合に表示されるメッセージは、大体こんな意味です。
環境設定がProductionだからエラー表示しませんよ。
Developmentに変更して再度アクセスしたら表示できますよ。
ただし、本環境でDevelopmentにするとエラー詳細がセキュリティリスクになるのでお勧めしませんよ。
初めて実行環境構築する際に出てきたりすると環境構築で何かミスったかなと思って、あまりよく見ずにスルーしがちですが、きちんと対処してエラーを確認した方が解決への近道です。
サービス定義ファイルに設定する
環境構築する中で、Apacheから転送された要求に対してアプリケーションのKestrelプロセスを起動して監視するためのサービスファイルを作っているはずです。
公式リファレンス(ハイライト箇所は任意)
/etc/systemd/system/kestrel-hellomvc.service
Apacheでは、このサービス定義ファイル内で環境設定の値を変更します。
公式リファレンス
[Unit] Description=Example .NET Web API App running on CentOS 7 [Service] WorkingDirectory=/var/aspnetcore/hellomvc ExecStart=/usr/local/bin/dotnet /var/aspnetcore/hellomvc/hellomvc.dll Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 SyslogIdentifier=dotnet-example User=apache Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target
修正方法
ここからは、上のファイル構成の場合の一連の変更手順を記載します。
サービスファイルを編集する
テキストエディタで開きます。
vi /etc/systemd/system/kestrel-hellomvc.service
Insertキーから編集モードに入り、以下の該当箇所を「Production」、「Development」のいづれかに書き換えます。
Environment=ASPNETCORE_ENVIRONMENT=Production
Escキーで編集モードを抜け、上書き保存します。
上書き保存::wq
サービスファイルを変更しただけでは反映されないため、再読み込みとサービスの再起動を行います。
再読み込み:systemctl daemon-reload
サービスの再起動:systemctl restart kestrel-hellomvc.service
サービスを再起動すると、接続中のユーザーのリクエストが切れるかもしれないので注意して下さい。
そもそも本環境で書き換えるのはオススメしませんが。。
コメントを書く