更新后网站空白

你好,

我刚刚更新了我们的 Discourse 论坛,现在页面是空白的(首页和管理后台)。HTML 看起来没问题,RSS 也能正常工作。

我发现是由于我们的主题导致的 JavaScript 错误。问题可能出在这里吗?
Capture d'écran 2020-08-22 à 15.57.03

我该如何解决?能否通过命令行修改或禁用主题的 JavaScript 代码?或者安装一个新主题?

编辑:我没有安装其他主题,所以无法使用 ?preview_theme_id=

1 个赞

@CamilleRoux

如果你熟悉直接数据库查询,也可以直接用 SQL 在数据库中更改默认主题。

希望这能帮到你。

1 个赞

您是否尝试过如何使用 Discourse 安全模式

2 个赞

你在做什么 :thinking:

  • 检查安全模式:https://forum.humancoders.com/?safe_mode=no_custom%2Cno_plugins%2Conly_official

  • 日志 https://forum.humancoders.com/logs(私密?)

尝试通过 SSH 运行以下命令:

cd /var/discourse
git pull
./launcher rebuild app
3 个赞

安全模式不起作用……错误依旧:

ReferenceError: Discourse is not defined
    at https://forum.humancoders.com/assets/start-discourse-efa4e5abfbd1b50b5152ffbe64d5dcea9f7c33f766dcc6387e2711f0f2112148.js:1:1

我已经执行了重建 ./launcher rebuild app

我没有安装其他主题,所以我需要通过 CLI 安装一个新主题,或者修改现有的主题。我不知道该怎么做。

哦,所以你的默认主题里有损坏的内容,导致无法禁用它?如果是这样的话,那你确实应该始终把这些自定义设置放在主题组件中(虽然这时候告诉你这个可能不太合适!)。不过我也不完全确定情况就是这样。

3 个赞

我还不完全确定问题是否出在主题上。但如果是的话,是的,创建一个空主题并将其设为默认设置可能会解决问题。我不知道该怎么做 :frowning:

我也不确定。:man_shrugging:

我也不清楚。我想我能搞定,但我手头有一堆付费工作,正尽量不在周末处理。

你好 @CamilleRoux

我刚刚通过在前端开发控制台中将 User-Agent 字符串设置为 Google Bot 的方式,帮你检查了你的网站。这样会显示仅由 Rails 渲染的站点,而不会加载 Ember SPA。

从 Rails 的角度来看,你的网站状态是“正常”,这表明你的容器运行正常。正如你所推测的,问题出在你的主题(组件)中的 JavaScript 上。

请查看附件:

@CamilleRoux

你能否进入 psql 提示符(或者如果你愿意,也可以使用 Rails 控制台),并运行以下查询:

让我们检查一下安装了多少个主题:

discourse=# select count(*) from themes;
 count 
-------
    22
(1 row)

让我们检查一下当前的默认主题 ID 是什么:

discourse=# select value from site_settings where name = 'default_theme_id';
 value 
-------
 3
(1 row)

另外,能否也运行这个查询?

discourse=# select id, name, component, enabled from themes;
 id |           name            | component | enabled 
----+---------------------------+-----------+---------
  3 | Light                     | f         | t
  6 | Minima                    | f         | t
  7 | Hamburger Theme Selector  | t         | t
  2 | Material Dark             | f         | t
  8 | Vincent                   | f         | t
  5 | Material                  | f         | t
  9 | Simple                    | f         | t
 10 | Graceful Wide             | f         | t
 11 | Dark Wide                 | f         | t
 14 | Alien Night               | f         | t
 39 | md-composer-extras-neo    | t         | t
 40 | Plugin Outlets            | t         | f
 15 | User Card Directory       | t         | f
 41 | Raw Post Button           | t         | t
  4 | Graceful                  | f         | t
  1 | Dark for GSE              | f         | t
 42 | Dark                      | f         | t
 43 | discourse gifs            | t         | t
 44 | Cookie Consent Banner     | t         | t
 46 | Graceful Edits            | t         | t
 45 | Neo Stuff Scratch Sheets  | t         | t
 48 | Unformatted Code Detector | t         | t
4 个赞

顺便一提,

@CamilleRoux

我刚刚为你测试了这一点。

在你运行我上面帖子中的查询以列出所有主题(并且你已记录当前主题状态)之后,假设你可以访问数据库并运行此查询(无论是通过 Rails 还是 psql),你可以尝试以下操作:

禁用所有主题组件的查询

discourse=#  update themes set enabled = false where component = true;

上述查询将禁用你所有的主题组件。

然后你可以尝试访问你出问题的网站,看看“会发生什么”。

如果我是你,基于以机器人用户代理检查你的网站的情况,我会禁用所有主题组件。

实际上,我会逐个禁用它们,从与导航链接相关的任何主题组件开始(参见下面的 JS 错误,作为起点);因为我对直接 SQL 数据库查询很熟悉且经验丰富。你具备扎实的 SQL 技能吗?

如果你对此不太放心,可以给我发消息并授予我访问权限,我会帮你摆脱这个“不太好的局面”。根据我目前掌握的信息,我很有信心能帮你让网站重新正常运行 :slight_smile:

另见你的 JS 错误:
Discourse.ExternalNavItem=Discourse.NavItem.extend({href:function(){return this.get('href');}.property('href')});I18n.translations.fr.js.filters.formations={title:"Formations",help:"Formations pour développeur·se·s"};Discourse.NavItem.reopenClass({buildList:function(category,args){var list=this._super(category,args);list.push(Discourse.ExternalNavItem.create({href:'https://www.humancoders.com/',name:'formations'}));return list;}});jQuery(function($){$(document).on("ready",function(){if(Cookies.get('hcFirstPage')==undefined){$(document).on('click','.toggle-menu',function(e){e.preventDefault();$('.main-nav').toggleClass('show');});var tweenBounce=TweenMax.to('#topbar',1.2,{maxHeight:"50px",delay:2,ease:Power1.easeInOut});var tweenBounceBack=TweenMax.to('#topbar',1.2,{maxHeight:"4px",delay:5.5,ease:Power1.easeInOut});Cookies.set('hcFirstPage',true,{expires:.04});}else{var tweenBounce=TweenMax.to('#topbar',0);}
window.addEventListener('unload',function(){Cookies.remove('hcFirstPage');});var tweenOpen,tweenClose;$('.topbar-toggle').on('mouseenter',function(){tweenBounce.kill();tweenOpen=TweenMax.to('#topbar',.4,{maxHeight:"50px",ease:Power1.easeInOut});});$('#topbar-zone-click').on('mouseenter',function(){tweenBounce.kill();tweenOpen=TweenMax.to('#topbar',.4,{maxHeight:"50px",ease:Power1.easeInOut});});$('#topbar').on('mouseenter',function(){tweenBounce.kill();tweenOpen=TweenMax.to('#topbar',.4,{maxHeight:"50px",ease:Power1.easeInOut});});$('#topbar-zone-click').on('mouseleave',function(){tweenOpen.kill();tweenClose=TweenMax.to('#topbar',.4,{maxHeight:"4px",ease:Power1.easeInOut});});$('.topbar-toggle').on('mouseleave',function(){tweenOpen.kill();tweenClose=TweenMax.to('#topbar',.4,{maxHeight:"4px",ease:Power1.easeInOut});});$('#topbar').on('mouseleave',function(){tweenOpen.kill();tweenClose=TweenMax.to('#topbar',.4,{maxHeight:"4px",ease:Power1.easeInOut});});});});
6 个赞

好的,谢谢大家帮忙。
这是一个旧安装,我没有安装其他主题或组件。所以你们无法更改我的主题或禁用所有组件。
因此,我恢复了一个旧备份,更新了主题,然后更新了 Discourse。情况有所好转,但我仍然有一个错误(之前有两个)。

错误如下:

Uncaught ReferenceError: Discourse is not defined
<anonymous> /assets/start-discourse-efa4e5abfbd1b50b5152ffbe64d5dcea9f7c33f766dcc6387e2711f0f2112148.js:1

该文件的内容如下:

Discourse.start();

我是否使用了旧版本的默认主题?(当前主题是在 2016 年通过向默认主题添加一些 CSS 和 JS 创建的)

附注:网站已经恢复运行,因为我使用的是未更新 Discourse 的备份。

4 个赞

那么,我认为我会先创建一个通用的新主题并将其设为默认主题,然后执行升级并修复你的主题。

4 个赞

小更新:我在 Discourse 的某些版本上遇到了这个 bug,但并非所有版本都有。在 stabletests-passed 版本上运行正常,但在 beta 版本上不行。我承认该 bug 已经被修复,但尚未提交到 beta 分支。

2 个赞

但问题出在你的主题自定义上,还是默认主题上?

使用当前的测试版,无论使用何种主题,我都会遇到相同的错误。