Railsアプリにデータを投稿するPythonスクリプトがあります。私が抱えていると思われる問題は、パラメータが正しくフォーマットされていないことです。Pythonでパラメータを構築する適切な方法はどのようになりますか?
Pythonコード:
request = urllib.urlencode(dict({'temperature_reading': {'CelciusReading':temperature}}))
印刷リクエスト
Railsサーバーが取得しているログファイルの内容:
Parameters: {"temperature_reading"=>"{'CelciusReading': 42.25}"}
Webページ自体から投稿したときのログは次のようになります。
Parameters: {"utf8"=>"✓", "authenticity_token"=>"MMbvXa3xA6NFU8Mf1Y2dagpm3GuBP3ZApdFXI55Ql00=", "temperature_reading"=>{"CelciusReading"=>"42.25"}, "commit"=>"Create Temperature reading"}
何が適切に行われているのかを理解していれば、Pythonは'CelciusReading': 42.25
それをあるべきときにフォーマットしているよう'CelciusReading'=>42.25
です
以下は、それが誰かに役立つ場合のエラーログです。
2014-08-23T00:26:05.485205 + 00:00 heroku [router]:at = info method = POST path = "/ Temperature_readings" host = smoke-watch.herokuapp.com request_id = e5641fd5-4ead-446d-883a-c800b05f4f11 fwd = "98.17.210.4" dyno = web.1 connect = 1ms service = 22ms status = 500 bytes = 489 2014-08-23T00:26:05.480780 + 00:00 app [web.1]:
app / controllers / temperature_readings_controller。 rb:73:in create '2014-08-23T00:26:05.480778 + 00:00 app [web.1]:NoMethodError( "{' CelciusReading ':42.25}":Stringの未定義のメソッド `permit'):2014- 08-23T00:26:05.480796 + 00:00 app [web.1]:2014-08-23T00:26:05.477662 + 00:00 app [web.1]:TemperatureReadingsController#createによるHTMLとしての処理temperature_reading_params' 2014-08-23T00:26:05.480798+00:00 app[web.1]: 2014-08-23T00:26:05.466259+00:00 app[web.1]: Started POST "/temperature_readings" for 98.17.210.4 at 2014-08-23 00:26:05 +0000 2014-08-23T00:26:05.480775+00:00 app[web.1]: 2014-08-23T00:26:05.480794+00:00 app[web.1]:
app/controllers/temperature_readings_controller.rb:28:in
助けてくれてありがとう
データ型を一致させるために温度を文字列として送信することをKenHampsonが考えました。私はそれを試しましたが、それでもそれが好きではないようです:
2014-08-23T11:56:58.602452 + 00:00 app [web.1]:2014-08-23 11:56:58 + 00002014-08-23T11:56に98.17.210.4のPOST "/ temperature_readings"を開始しました:58.741053 + 00:00 app [web.1]:TemperatureReadingsController#createによるHTMLとしての処理2014-08-23T11:56:58.741064 + 00:00 app [web.1]:パラメーター:{"temperature_reading" => "{ 'CelciusReading':'38 .875 '} "} 2014-08-23T11:56:58.759571 + 00:00 app [web.1]:18ミリ秒で500内部サーバーエラーを完了しました2014-08-23T11:56:58.760521 + 00:00 app [web.1]:2014-08-23T11:56:58.760523 + 00:00 app [web.1]:NoMethodError(undefined method Temperature_reading_params '2014-08-23T11:56:58.760528 + 00:00 app [web。 1]:2014-08-23T11:56:58.760526 + 00:00 app [web.1]:app / controllers / Temperature_readings_controller.rb :28:in `create '
permit' for "{'CelciusReading': '38.875'}":String): 2014-08-23T11:56:58.760527+00:00 app[web.1]: 2014-08-23T11:56:58.760525+00:00 app[web.1]:
app/controllers/temperature_readings_controller.rb:73:in
Pythonスクリプトとは異なることに気付いたもう一つの点は、引用符がCelciusReading要素を囲んでいることです:" {'CelciusReading':'38 .875 '} "対Rubyは次のように見えます:{"CelciusReading" => "42.25"}
jsonで投稿する方が簡単な方法であることがわかりました。以下は、jsonリクエストのデータをフォーマットした方法です。
data = {
'temperature_reading': {'CelciusReading': temperature}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加