Dieser Artikel stellt die Lösung für das Problem vor, dass sinatra request.body.read nur einmal gelesen werden kann.
Ich verstehe es nicht ganz, aber request.body.read kann den Body einer POST-Anfrage abrufen, aber er kann nur einmal abgerufen werden. (Unten)
require "sinatra"
require "open3"
require 'json'
require 'pry'
post "/androidsms" do
binding.pry
end
yuis ASUS /mnt/c/pg/ruby_dev$ cat Gemfile.lock | ag sinatra
sinatra (2.0.5)
sinatra
[1] pry(#<Sinatra::Application>)> @body = request.body.read
=> "{ \"ContactName\": \"Fumiya\", \"Text\": \"X\", \"OccurredAt\": \"April 21, 2019 at 03:47AM\", \"FromNumber\": \"07044080062\" }"
[2] pry(#<Sinatra::Application>)> request.body.read
=> ""

Hmm, ich weiß nicht, ob es spezifisches Verhalten für serverseitige Dinge wie Sinatra ist (oder ob es nur ein simpler Bug ist), Ruby-spezifisches Verhalten oder etwas Weitverbreitetes, aber solche Dinge passieren. Ich konnte bei der Suche nichts dergleichen finden, also habe ich keine Ahnung über die Ursache, aber geben Sie mir jedenfalls meine 2 Stunden zurück.
Wenn es ein Objekt gibt, das sich so verhält, würde ich mich freuen, wenn mir jemand, der den Namen oder dergleichen kennt, es beibringen könnte.