无法使嵌入正常工作

一些进一步的调试发现:

我手动创建了一个主题,并在我的 JavaScript 代码片段中将 discourseEmbedUrl: 'http://localhost:3001/enlistments/<%= @enlistment.id %>' 替换为 topicId: 14,结果评论成功加载了。这表明问题并非出在 CORS 或 X-Frame-上,而是:(a) 与网页抓取有关,(b) 可能与嵌入时的错误处理机制有关。

为了调查抓取问题,我访问了一个之前从未尝试访问过的新页面(因此理论上不应触发任何抓取操作)。我一边观察我的应用的 Rails 控制台,一边加载该页面。我在日志中看到了一次 /enlistments/6 的记录。我等待直到 JavaScript 控制台中抛出错误消息,此时 Discourse 本应已尝试抓取该页面,但我的应用的 Rails 控制台并未显示任何其他访问尝试日志。

在 Discourse 的 /logs 端点中也没有发现任何错误,在 Discourse 的 Rails 日志中我也看不出任何异常。

我起初以为可能是 Discourse 无法访问我的网站,于是我登录到 Discourse 应用的 Rails 控制台并执行了以下命令:

± |master U:3 ?:2 ✗| → rails c
Loading development environment (Rails 6.0.3.3)
[1] pry(main)> require "net/http"
=> false
[2] pry(main)> url = URI.parse("http://localhost:3001/enlistments/6")
=> #<URI::HTTP http://localhost:3001/enlistments/6>
[3] pry(main)> req = Net::HTTP.new(url.host, url.port)
=> #<Net::HTTP localhost:3001 open=false>
[4] pry(main)> res = req.request_head(url.path)
4=> #<Net::HTTPOK 200 OK readbody=true>
[5] pry(main)>

在我执行上述操作的同时,我在我的应用的 Rails 服务器访问日志中看到了相应的记录。这证实了 Discourse 确实能够访问我的应用。

现在我怀疑问题可能出在 Sidekiq 或任务调度上?:man_shrugging: 不过我不太清楚该如何调试这一点,因为我以前从未使用过 Sidekiq。

我又通过 TablePlus(一个支持 Redis 的数据库图形界面工具)查看了 Redis 中的数据,发现大约有 3 行数据,其 key 类似于 default:logster-env-96404aef1da0c422fc32e3bb82d85fbc,而 value 类似于:

[
  {
    "hostname": "myhostname",
    "process_id": 7188,
    "application_version": "60bc38e6a8914a10341a32ff9909e69faa65ffef",
    "params": {
      "embed_url": "http: //localhost:3001/enlistments/11927"
    },
    "HTTP_HOST": "localhost:3000",
    "REQUEST_URI": "/embed/comments?embed_url=http%3A%2F%2Flocalhost%3A3001%2Fenlistments%2F11927",
    "REQUEST_METHOD": "GET",
    "HTTP_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.60 Safari/537.36",
    "HTTP_ACCEPT": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "HTTP_REFERER": "http://localhost:3000/embed/comments?embed_url=http%3A%2F%2Flocalhost%3A3001%2Fenlistments%2F11927",
    "time": 1606253787041
  }
]

其中 typeLISTttl-1。我猜这意味着任务已被触发?

我还在 /sidekiq 中查看了一番,但既没看到与此任务相关的任何记录,也没找到名为 RetrieveTopic 的队列 :frowning:

问题范围已经缩小了不少,但如果有什么想法,非常希望能得到您的帮助!