迁移到新服务器 - 数据库错误

我们正在尝试将所有内容迁移到新服务器。迁移完成后,顶部出现了以下消息:

当我尝试在应用内运行以下命令时:

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

我收到了以下错误:

ActiveModel::MissingAttributeError: 无法写入未知属性
来自 /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' 原因:ActiveRecord::StatementInvalid: PG::SyntaxError: 错误:在 """" 附近存在零长度的限定标识符 LINE 1: ... = '2020-04-23 16:30:36.173916' WHERE "site_settings"."" = 3 ^ 来自 /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’
原因:PG::SyntaxError: 错误:在 “”“” 附近存在零长度的限定标识符
LINE 1: … = ‘2020-04-23 16:30:36.173916’ WHERE “site_settings”.“” = 3
^
来自 /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 步之后,且我们已重复该流程两次。

您是否在 app.yml 中定义了开发者邮箱?您是否尝试过重新构建容器?

是的。Discourse 在不导入迁移数据的情况下运行正常,没有错误。但在恢复备份数据库后,无法修改设置,因为会报错;尝试激活开发者邮箱时也无法发送邮件。这就是我试图手动激活账户的原因,但随后我遇到了那个错误。

备份恢复后,您是否执行了 ./launcher rebuild app?或者进入容器并运行了 rake db:migrate?这可能会有所帮助,但在我们尝试之前无法确定。:smiley:

我已经运行了 launcher rebuild 应用,但问题依然存在。我应该从服务器端运行 rake,还是在应用内部运行(launcher enter app)?

./launcher rebuild app 会执行相同的操作。

您之前的实例是否仍在运行?如果是,您接下来最好的做法是销毁新实例,并使用旧实例的 fresh 备份重新构建它。

是的,之前的服务器仍在运行。经过更深入的问题排查,我们发现即使在旧服务器上也会出现这种情况。同样的错误依然会出现。:face_with_raised_eyebrow:

我是否应该尝试清空 site_settings 表并手动重新设置?如果我从 PostgreSQL 中手动删除该表的所有记录,Discourse 还能正常工作吗?

除非你清楚自己在做什么,否则我建议避免这样做。

你可以到 Marketplace 发帖寻求更专业的帮助。不幸的是,听起来你的安装可能已损坏。

1 个赞