我们正在尝试将所有内容迁移到新服务器。迁移完成后,顶部出现了以下消息:
当我尝试在应用内运行以下命令时:
# 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’
关于如何完成安装,有什么建议吗?这可能看起来像是一张表已损坏。
justin
(Justin DiRose)
2
能退一步详细说明一下您具体想做什么吗?这是在恢复备份之前还是之后?或者这是一次全新安装?
我们执行了以下步骤:
- 在新服务器上安装最新版本
- 将旧服务器切换为只读模式,并进行了备份
- 在新服务器上恢复备份
错误发生在第 3 步之后,且我们已重复该流程两次。
justin
(Justin DiRose)
4
您是否在 app.yml 中定义了开发者邮箱?您是否尝试过重新构建容器?
是的。Discourse 在不导入迁移数据的情况下运行正常,没有错误。但在恢复备份数据库后,无法修改设置,因为会报错;尝试激活开发者邮箱时也无法发送邮件。这就是我试图手动激活账户的原因,但随后我遇到了那个错误。
justin
(Justin DiRose)
6
备份恢复后,您是否执行了 ./launcher rebuild app?或者进入容器并运行了 rake db:migrate?这可能会有所帮助,但在我们尝试之前无法确定。
我已经运行了 launcher rebuild 应用,但问题依然存在。我应该从服务器端运行 rake,还是在应用内部运行(launcher enter app)?
justin
(Justin DiRose)
8
./launcher rebuild app 会执行相同的操作。
您之前的实例是否仍在运行?如果是,您接下来最好的做法是销毁新实例,并使用旧实例的 fresh 备份重新构建它。
是的,之前的服务器仍在运行。经过更深入的问题排查,我们发现即使在旧服务器上也会出现这种情况。同样的错误依然会出现。
我是否应该尝试清空 site_settings 表并手动重新设置?如果我从 PostgreSQL 中手动删除该表的所有记录,Discourse 还能正常工作吗?
justin
(Justin DiRose)
11
除非你清楚自己在做什么,否则我建议避免这样做。
你可以到 Marketplace 发帖寻求更专业的帮助。不幸的是,听起来你的安装可能已损坏。
1 个赞