いくつかの追加のデバッグ結果をお伝えします:
手動でトピックを作成し、JavaScript スニペット内の discourseEmbedUrl: 'http://localhost:3001/enlistments/<%= @enlistment.id %>' を topicId: 14 に置き換えてみました。するとコメントが読み込まれました。これは CORS や X-Frame- の問題ではなく、(a) スクレイピングに関連する何か、そして (b) 埋め込み時のエラーハンドリングの問題である可能性を示唆しています。
スクレイピングの問題を調査するため、以前アクセスしたことがない新しいページに移動しました(そのため、そのページに対するスクレイピングは試行されていません)。アプリの Rails コンソールを観察しながらページをロードしました。ログに /enlistments/6 が 1 回表示されました。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 やジョブスケジューリングに問題があるのではないかと思っています🤷♂️ しかし、そのデバッグ方法がわかりません。Sidekiq を使ったことがないためです。
Redis データを再度確認しました(Redis に対応したデータベース GUI の TablePlus を使用)。key が default:logster-env-96404aef1da0c422fc32e3bb82d85fbc のような値で、value が以下のような約 3 行のデータが表示されました:
[
{
"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
}
]
type は LIST で、ttl は -1 です。これはジョブが開始されていることを意味するのでしょうか?
/sidekiq を調べてみましたが、このジョブに関する言及や RetrieveTopic という名前のキューは見当たりませんでした ![]()
確かに範囲は狭まってきましたが、何か思い当たる節があればお手伝いいただきたいです!