新規サーバーへの移行:データベースのエラー

すべてのデータを新しいサーバーに移行しようとしていますが、移行後に画面上部に以下のメッセージが表示されます。

アプリ内で以下を実行しようとすると、

  # sudo ./launcher enter app
  # rails c
  > user = User.find_by_email("<admin_email>")
  > user.admin = true
  > user.save`

以下のエラーが発生します。

ActiveModel::MissingAttributeError: can’t write unknown attribute ``
from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activemodel-6.0.2.2/lib/active_model/attribute.rb:206:in with_value_from_database' Caused by ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: zero-length delimited identifier at or near """" LINE 1: ... = '2020-04-23 16:30:36.173916' WHERE "site_settings"."" = 3 ^ from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.1/lib/patches/db/pg.rb:69:in exec_params’
Caused by PG::SyntaxError: ERROR: zero-length delimited identifier at or near “”“”
LINE 1: … = ‘2020-04-23 16:30:36.173916’ WHERE “site_settings”.“” = 3
^
from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.1/lib/patches/db/pg.rb:69:in `exec_params’

インストールを完了させる方法についてご教示ください。テーブルが破損しているように見えます。

少し戻って、具体的に何をしようとしているのか詳しく教えていただけますか?これはバックアップを復元する前ですか、それとも後ですか?あるいは、新規インストールですか?

実施した手順:

  1. 新規サーバーに最新バージョンをインストール
  2. 旧サーバーを読み取り専用モードに切り替え、バックアップを取得
  3. 取得したバックアップを新規サーバーに復元

エラーは手順3の後に発生しており、このプロセスは2回繰り返しました。

app.yml に開発者用メールアドレスが定義されていますか?コンテナの再ビルドを試しましたか?

はい。Discourse はマイグレーションのインポートなしでは正しく動作し、エラーも発生しません。バックアップデータベースを復元した後、設定を変更しようとするとエラーが発生し、開発者用メールアドレスのアクティブ化を試みてもメールが送信されません。そのため、アカウントを手動でアクティブ化しようとしたのですが、その際にそのエラーに遭遇しました。

バックアップ復元後に ./launcher rebuild app を実行しましたか?それともコンテナに入って rake db:migrate を実行しましたか?それが役立つかもしれませんが、実際に試すまで確実なことは言えません :smiley:

すでにランチャーのリビルドアプリを実行しましたが、問題は解決しませんでした。rake はサーバー側から実行すべきですか、それともアプリ内(launcher enter app)から実行すべきですか?

./launcher rebuild app で同じことができます。

前のインスタンスは現在も実行されていますか?もしそうであれば、今後の最善策は新しいインスタンスを削除し、古いインスタンスからの新しいバックアップで再構築することです。

はい、以前のサーバーは引き続き稼働しています。問題をより深く調査したところ、この事象は古いサーバーでも発生することがわかりました。同じエラーが表示されます。:face_with_raised_eyebrow:

site_settings テーブルをクリアして、手動で再設定するのはどうでしょうか?PostgreSQL からこのテーブルのすべてのレコードを手動で削除した後、Discourse は正常に動作しますか?

それが何をしているか理解していない限り、その行動は避けたほうがいいでしょう。

より高度なサポートが必要な場合は、Marketplace に投稿することをお勧めします。残念ながら、インストールに問題があるようです。