Vielleicht ist das eine Stack Overflow-Frage, und ich verstehe nicht, was gsub macht, aber das sieht nach bizarrem Ruby-Verhalten aus. Ich frage mich, ob es irgendwie mit dem Ruby-Image zusammenhängen könnte. Ich erhalte dieselben Ergebnisse in irb auf meinem lokalen Rechner.
Ich dachte, es könnte sich um ein Verhalten von dup handeln, das ich nicht verstanden habe, aber ich kann das Verhalten reproduzieren, wenn ich den String zweimal definiere. Beim ersten Mal schlägt gsub fehl, die URL einzufügen, aber bei nachfolgenden Ausführungen mit denselben Daten wird sie, wie erwartet, eingefügt.
[1] pry(main)> save=%(<p>On Android, click the three-dot icon in the upper right corner and select Relations from the popup menu. This function wasn't working for me until yesterday, so perhaps on Android, it's still in A/B testing. <UPL-IMAGE-PREVIEW url="https://somehost.s3.eu-central-1.amazonaws.com/2021-08-29/1630236738-85280-screen-shot-2021-08-29-at-83023-pm.png">[upl-image-preview url=https://somehost.s3.eu-central-1.amazonaws.com/2021-08-29/1630236738-85280-screen-shot-2021-08-29-at-83023-pm.png]</UPL-IMAGE-PREVIEW></p>
[1] pry(main)* </r>
[1] pry(main)* )
=> "<p>On Android, click the three-dot icon in the upper right corner and select Relations from the popup menu. This function wasn't working for me until yesterday, so perhaps on Android, it's still in A/B testing. <UPL-IMAGE-PREVIEW url=\"https://somehost.s3.eu-central-1.amazonaws.com/2021-08-29/1630236738-85280-screen-shot-2021-08-29-at-83023-pm.png\">[upl-image-preview url=https://somehost.s3.eu-central-1.amazonaws.com/2021-08-29/1630236738-85280-screen-shot-2021-08-29-at-83023-pm.png]</UPL-IMAGE-PREVIEW></p>\n</r>\n"
[2] pry(main)> s=save.dup
=> "<p>On Android, click the three-dot icon in the upper right corner and select Relations from the popup menu. This function wasn't working for me until yesterday, so perhaps on Android, it's still in A/B testing. <UPL-IMAGE-PREVIEW url=\"https://somehost.s3.eu-central-1.amazonaws.com/2021-08-29/1630236738-85280-screen-shot-2021-08-29-at-83023-pm.png\">[upl-image-preview url=https://somehost.s3.eu-central-1.amazonaws.com/2021-08-29/1630236738-85280-screen-shot-2021-08-29-at-83023-pm.png]</UPL-IMAGE-PREVIEW></p>\n</r>\n"
[3] pry(main)> s.gsub!(/<UPL-IMAGE-PREVIEW url="(.+?)">.+?<\/UPL-IMAGE-PREVIEW>/i,"\nIMAGEISHERE\n#{$1}\n")
=> "<p>On Android, click the three-dot icon in the upper right corner and select Relations from the popup menu. This function wasn't working for me until yesterday, so perhaps on Android, it's still in A/B testing. \nIMAGEISHERE\n\n</p>\n</r>\n"
[4] pry(main)> s=save.dup
=> "<p>On Android, click the three-dot icon in the upper right corner and select Relations from the popup menu. This function wasn't working for me until yesterday, so perhaps on Android, it's still in A/B testing. <UPL-IMAGE-PREVIEW url=\"https://somehost.s3.eu-central-1.amazonaws.com/2021-08-29/1630236738-85280-screen-shot-2021-08-29-at-83023-pm.png\">[upl-image-preview url=https://somehost.s3.eu-central-1.amazonaws.com/2021-08-29/1630236738-85280-screen-shot-2021-08-29-at-83023-pm.png]</UPL-IMAGE-PREVIEW></p>\n</r>\n"
[5] pry(main)> s.gsub!(/<UPL-IMAGE-PREVIEW url="(.+?)">.+?<\/UPL-IMAGE-PREVIEW>/i,"\nIMAGEISHERE\n#{$1}\n")
=> "<p>On Android, click the three-dot icon in the upper right corner and select Relations from the popup menu. This function wasn't working for me until yesterday, so perhaps on Android, it's still in A/B testing. \nIMAGEISHERE\nhttps://somehost.s3.eu-central-1.amazonaws.com/2021-08-29/1630236738-85280-screen-shot-2021-08-29-at-83023-pm.png\n</p>\n</r>\n"
Nachfolgende Ausführungen von
s=save.dup
s.gsub!(/<UPL-IMAGE-PREVIEW url="(.+?)">.+?<\/UPL-IMAGE-PREVIEW>/i,"\nIMAGEISHERE\n#{$1}\n")
liefern die URL-Ersetzung, wie ich es erwarte.
Ich hatte neulich ein ähnliches Problem, das ich in diesem Beitrag beschrieben habe, jedoch in einer vorherigen Bearbeitung. Dieser Code war:
def fix_slack_posts
SiteSetting.min_post_length = 2
reg=/(\\*\\*)(This topic was automatically generated from Slack. You can find the original thread \\[here\\].+?\\))(\\*\\*\\.)?\\s*?([a-zA-Z, ()]* : )(.*)/m
preg = /([a-zA-Z, ()]+? : )(.*)/m
topic_posts = Post.where("raw like '**This topic was automatically%'")
topic_posts.each do |tpost|
begin
tpost.raw.gsub!(reg,"#{$5}\\n\\n#{$2}.")
tpost.save!
tpost.rebake!
rescue
puts "Can't update topic post #{tpost.raw}"
end
posts = Post.where(topic_id: tpost.topic_id).where("post_number > 1")
posts.each do |post|
if post.raw.gsub(preg,"#{$2}").length>=10
begin
post.raw.gsub!(preg,"#{$2}")
post.save!
post.rebake!
rescue
puts "#{post.id}--cannot save #{post.raw}. "
end
end
end
end
SiteSetting.min_post_length = 10
end
Und was passierte, war, dass tpost.raw in der zweiten Iteration der Schleife den Wert des letzten post.raw aus der vorherigen Iteration annahm.
Ich dachte, ich würde verrückt werden, aber ich habe dies gesehen.