你好,
我按照推荐的安装指南在 Fedora 31 服务器上安装了 Discourse,但使用 podman 而非 Docker 来运行容器。今天早上初次设置时一切顺利,但在尝试通过纯 HTTP 访问主机上的 Nginx 时遇到了问题,最终不得不在两个 Nginx 实例上都使用 SSL 证书。配置 Discourse 后一切正常。
后来我决定在关闭 SSL 的情况下重新构建 Discourse,并使用非 root 用户账户进行构建。此时通过纯 HTTP 访问主机没有问题,但页面显示为空白(标题正常,favicon 也正常)。
我检查了容器中的目录:
root@xena-app:/var/www/discourse# ls public/assets -al
total 15640
drwxr-xr-x. 2 discourse discourse 10 Jan 11 13:54 .
drwxr-xr-x. 3 discourse discourse 29 Jan 11 13:57 ..
-rw-r--r--. 1 discourse discourse 595 Jan 11 13:49 _activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js
-rw-r--r--. 1 discourse discourse 250 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.br
-rw-r--r--. 1 discourse discourse 420 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.gz
-rw-r--r--. 1 discourse discourse 695 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.map
-rw-r--r--. 1 discourse discourse 990519 Jan 11 13:50 _admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
-rw-r--r--. 1 discourse discourse 83903 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.br
-rw-r--r--. 1 discourse discourse 106465 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
-rw-r--r--. 1 discourse discourse 366446 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map
drwxr-xr-x. 2 discourse discourse 4096 Jan 11 13:54 admin-login
...
所请求的文件确实缺失,Nginx 也报告了这一点:
2020/01/11 13:59:49 [error] 60#60: *20 open() "/var/www/discourse/public/assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js" failed (2: No such file or directory), client: 10.0.2.2, server: _, request: "GET /assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js HTTP/1.0", host: "idlerpg.xyz", referrer: "https://idlerpg.xyz/"
我原以为这是安装问题,因为今天早上以 root 身份在主机上安装时这些文件是存在的!我清除了共享文件夹并重新以非 root 身份构建,结果依然相同。随后我又尝试以 root 身份使用与今天早上完全相同的设置重新构建,问题依旧。
非 root 安装始终会显示“恭喜,您已成功安装 Discourse!”页面,但完成安装后,由于缺少资源文件,页面变为空白。
请问有什么方法可以修复资源文件缺失的问题吗?
以防有人想知道今天早上是否真的成功了,这里有一张我手机上的截图
Discourse 目前还不允许我在一个帖子中使用两张图片
已将其标记为 bug。在构建 tests-passed 时,我无法获得包含所有资源的版本。我尝试进入容器并执行 rake assets:precompile,但同样的资源仍然缺失。
你好,Adriany,欢迎来到论坛
据我所知,Docker 是必要条件,而非可选项。你在哪里看到了这份更新的安装指南?
我刚刚用 Podman 替换了 Docker,运行良好。它们的命令行语法是兼容的。
1 个赞
好的,经过一些测试后,我现在可以确认每次重建后都会显示空白页面。如果我运行 RAILS_ENV=production bin/rake assets:precompile,之后就能正常工作。不知道为什么,按理说在重建时应该会自动编译这些资源才对?
Remah
(Just another happy Discourse user)
8
你看到关于 Podman 与 Docker 不兼容的这篇主题帖了吗?尤其是这条回复:
1 个赞
确实有效。Podman 不应影响初始资源预编译的结果文件。
Falco
(Falco)
10
在重建的资源编译阶段,您是否在输出中看到任何回溯信息?
1 个赞
Remah
(Just another happy Discourse user)
11
我们在这里是因为某些功能无法正常工作。应该和实际是两种不同的状态。
你非常肯定地断言 Podman 与此无关。最好能证明这一点,从而明确排除它作为影响因素的可能性。据我所知,你尚未使用 Docker 的官方安装方法进行完整安装,以验证是否能解决该问题。
是的,我有。
I, [2020-01-12T20:58:31.800117 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile'
清理临时文件
捆绑资源
I, [2020-01-12T20:58:38.208107 #758] INFO -- : 写入 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js
I, [2020-01-12T20:59:02.428630 #758] INFO -- : 写入 /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
I, [2020-01-12T20:59:02.447192 #758] INFO -- : 写入 /var/www/discourse/public/assets/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js
I, [2020-01-12T20:59:02.707559 #758] INFO -- : 写入 /var/www/discourse/public/assets/browser-update-1741a2ed67a367faeb0a582af064457e8b1b1354e52e6efcf8bf26301166dec8.js
I, [2020-01-12T20:59:02.753632 #758] INFO -- : 写入 /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
I, [2020-01-12T20:59:04.073148 #758] INFO -- : 写入 /var/www/discourse/public/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js
I, [2020-01-12T20:59:06.303026 #758] INFO -- : 写入 /var/www/discourse/public/assets/pretty-text-bundle-fa6ea00e2000bf2f9ed3f069be9253477fed5e7290b5d109a3e2d9498ac70e81.js
... [省略]
108798.339928812 正在压缩:vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js
uglifyjs '/var/www/discourse/public/assets/_vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' -m -c -o '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' --source-map "root='/assets',url='/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.map'" --output '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js'
gzip -f -c -9 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js > /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.gz
brotli -f --quality=11 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js --output=/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.br
vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js 压缩完成:耗时 3.33 秒
108801.669283898 正在压缩:admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
uglifyjs '/var/www/discourse/public/assets/_admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' -m -c -o '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' --source-map "root='/assets',url='/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map'" --output '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js'
gzip -f -c -9 /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js > /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
[...]
它确实会编译这些文件,但我每次构建后都必须重新运行一次,才能让缺失的文件出现。
Falco
(Falco)
13
有意思,所以文件生成没问题,但持久化失败了?
你可以检查一下 Podman 卷是如何工作的,以及它后端使用的驱动是什么。在 Docker 的世界里,多年来存储驱动出现过大量奇怪的问题,这甚至促使我们在启动脚本中维护了一份“推荐”驱动列表。
4 个赞
mcdanlj
(Michael K Johnson)
14
需要明确的是,我使用 Podman 进行的实验实际上是在测试 launcher,而非 Discourse。至少在我测试时,它依赖于 Docker 的输出细节,而 Podman 并未尝试模拟这些细节。
@Adriany,我猜你使用的是默认存储驱动,这也是 Discourse 推荐的驱动。在 Docker 中,该驱动为 “overlay2”——但我无法确认你的情况是否如此。
3 个赞
我使用的是 overlayfs,它等同于 overlay2。
有趣的是,在尝试添加插件并经历几次构建缺失资源后,它又顺利构建成功了,没有任何资源缺失。而当我在不带插件的情况下重新构建时,整个过程异常顺畅。这是怎么回事?
编辑:它确实对我有效,并且现在资源已在此处缓存。但在运行过程中,其他用户却遇到了问题。
编辑 2:另一次重新构建导致资源像之前一样出错,而解决方法是像之前那样重新构建。
1 个赞
Falco
(Falco)
16
如果我们的资源管道成功生成了文件,且操作系统报告没有错误,但文件在重建(即实际上重启了容器)后消失,我会将赌注重新押在 Podman 存储驱动上。
除非有人能使用 Docker 复现相同的行为(如果是这种情况,会有多个相关话题),否则恐怕您需要在 Podman 项目上为此提交工单。
3 个赞
嘿,
我做了更多调查,看来我猜错了文件存储的位置,或者只是没找到它们。
这些文件都返回 404,不过举个例子:
root@idlerpg:/var/www/discourse# find . -type f -name "*discourse-solved*"
./tmp/stylesheet-cache/discourse-solved_9_cb2984706f4402e95fd787160a5588ed0972ccc3.css
./tmp/stylesheet-cache/discourse-solved_9_cb2984706f4402e95fd787160a5588ed0972ccc3.css.map
./public/assets/plugins/_discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.gz
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.br
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.map
./app/assets/javascripts/plugins/discourse-solved.js.erb
./plugins/discourse-solved/test/javascripts/acceptance/discourse-solved-test.js.es6
它们确实在那里,所以我想这是 Discourse 的问题,而不是 Podman 的问题,我只是没找到正确的文件位置。
我原本以为可能是 Cloudflare 的问题,但当我在服务器上对 localhost 快速执行 curl 时,同样得到了 404 错误。
1 个赞
Falco
(Falco)
18
您能提供一下在 Docker 上复现此问题的步骤吗?
4 个赞