はじめに
プリザンターをさくらのVPS for Windows Server に構築し、データベースには Azure SQL Database を使う構成でセットアップしました。
構成は次の通りです。
- アプリケーションサーバー: さくらのVPS for Windows Server
- データベース: Azure SQL Database
- セットアップ対象: プリザンター
Azure SQL Database には、Windows Server 上の SQL Server Management Studio から接続できていたため、最初は「DB接続自体は問題なさそう」と考えていました。
ところが、プリザンター の CodeDefiner 実行時にエラーが発生し、少し手こずりました。
この記事では、そのときに遭遇したエラーと解決方法をまとめます。
構成
今回の構成は以下です。
アプリケーションは VPS 上の Windows Server で動かし、データベースのみ Azure SQL Database を利用しています。
最初に発生したエラー
CodeDefiner を実行すると、次のエラーが出ました。
dotnet Implem.CodeDefiner.dll _rds /l "ja" /z "Tokyo Standard Time"
<INFO> Starter.Main: Implem.CodeDefiner 1.4.16.1
<ERROR> Starter.ConfigureDatabase: [208] Invalid object name 'syslogins'.
原因その1: Azure SQL Database 用の設定になっていなかった
結論から言うと、プリザンター 側の DB 設定が Azure SQL Database 用になりきっていませんでした。
修正した内容
Rds.json を Azure SQL Database 用に修正しました。
ポイントは以下です。
-
ProviderをAzureにする -
SaConnectionString/OwnerConnectionString/UserConnectionStringの3つをすべて Azure SQL Database の接続文字列にする
修正イメージは以下です。
{
"Dbms": "SQLServer",
"Provider": "Azure",
"SaConnectionString": "接続文字列",
"OwnerConnectionString": "接続文字列",
"UserConnectionString": "接続文字列"
}
さらに発生したエラー
その後、テーブル作成自体は進んだものの、今度は次のようなエラーが出ました。
<ERROR> TablesConfigurator.ConfigureFullTextIndexSqlServer: [4060]
Cannot open database "Implem.Pleasanter" requested by the login.
Login failed for user '<DBユーザー>'.
ログを見ると、Azureのデータベースにはちゃんとテーブルが作成されていました。
つまり、DB 作成や初期テーブル展開はかなり進んでいる一方で、一部の処理だけ別のDB名 Implem.Pleasanter を見に行って失敗している 状態でした。
原因その2: Implem.Pleasanter の設定がどこかに残っていた
Service.json の Name に Implem.Pleasanter があり、Azure SQL Database 構成では、ここに 実際に使う Azure SQL Database の DB 名 を設定する必要があります。
Service.json のイメージは以下です。
{
"Name": "Azureのデータベース名"
}
この設定が Implem.Pleasanter になっていると、今回のように 最後の一部処理だけ Implem.Pleasanter で接続に失敗します。
Service.json の Name をAzure SQL Databaseのデータベース名に変更すると動作しました。
結局どうしたか
今回は、Service.json の初期値との整合性を優先し、Azure SQL Database 側のデータベース名をImplem.Pleasanter にそろえる形で対応しました。
Service.json 側を書き換える方法でも解決できますが、今回は設定ファイルの変更箇所を最小限にしたかったため、Azure SQL Database 側のデータベース名を合わせる方法を選びました。
さいごに
今回は、プリザンターを Windows Server と Azure SQL Database の構成でセットアップした際に遭遇したエラーと、その対処内容をまとめました。
最初は SQL Server Management Studio で接続できていたため安心していましたが、実際にはプリザンター側の設定が Azure SQL Database 向けにそろっているかどうかが重要でした。
特に Rds.json と Service.json の設定値がずれていると、今回のように一部の処理だけ別のデータベース名を参照して失敗することがあります。
これから同じような構成でプリザンターを構築する方の参考になれば幸いです。