Ich habe eine Rails-Seite, die auf localhost:5000 läuft, und einen lokalen Discourse-Server, der auf localhost:3000 läuft. Ich möchte Kommentare zu Artikeln aktivieren (in meinem Fall eine Rails-Ressource), und habe daher im Discourse-Admin-Bereich einen einbettbaren Host eingerichtet:
Dies ist das Skript-Snippet, das ich in meiner Rails-Ansicht hinzugefügt habe:
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'http://localhost:3000/',
discourseEmbedUrl: '<%= "http://localhost:5000/articles/#{@article.id}" %>'};
(function() {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')
[0]).appendChild(d);
})();
Ich erhalte die Meldung „Loading Discussion…“, aber danach passiert nichts weiter. Ich habe versucht, das Problem zu verfolgen, und komme zu folgendem Schluss:
In Sidekiq schlägt der Job Jobs::RetrieveTopic fehl mit Jobs::HandledExceptionWrapper: Wrapped FrozenError: can't modify frozen String.
Ich habe das Problem im Code auf Zeile 192 in der Methode TopicEmbed.absolutize_url zurückverfolgt:
prefix = "#{uri.scheme}://#{uri.host}"
prefix << ":#{uri.port}" if uri.port != 80 && uri.port != 443
Da mein Port 5000 ist (nicht 80 oder 443), versucht der Code, den Port an den Präfix-String anzuhängen, und es wird ein FrozenError ausgelöst. Der RetrieveTopic-Job enthält den Pragma-Kommentar # frozen_string_literal: true. Ich habe ihn experimentell entfernt, aber das Problem besteht weiterhin. Ich bin mir daher nicht sicher, ob in Discourse alle String-Literale standardmäßig eingefroren sind.
Haben Sie Tipps, wie ich das lokal zum Laufen bringe? Falls String-Literale tatsächlich eingefroren sein sollen, ist das dann ein Bug?
