Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用GoogleApps脚本在Rails5中发布JSON数据_Ruby On Rails_Json_Curl_Heroku_Google Apps Script - Fatal编程技术网

Ruby on rails 使用GoogleApps脚本在Rails5中发布JSON数据

Ruby on rails 使用GoogleApps脚本在Rails5中发布JSON数据,ruby-on-rails,json,curl,heroku,google-apps-script,Ruby On Rails,Json,Curl,Heroku,Google Apps Script,我有以下谷歌应用程序脚本: function myFunction() { var payload = { "person": { "first_name": "test", "last_name": "blah" } }; var options = { "method" : "post", "contentType" : "application/json", "payload" : payload

我有以下谷歌应用程序脚本:

function myFunction() {
   var payload =
   {
     "person": {
    "first_name": "test",
    "last_name": "blah"
    }
   };

  var options =
   {
     "method" : "post",
     "contentType" : "application/json",
     "payload" : payload
   };

   var response = UrlFetchApp.fetch("https://myappherokuapp.com/curl_example", options);
  Logger.log(response);
}
我正在发布的应用程序是Rails 5应用程序。运行脚本时出现的错误是

Request failed for https://myherokuapp.com/curl_example returned code 400
…在heroku这是我在日志中看到的

2016-11-09T16:43:37.966300+00:00 heroku[router]: at=info method=POST path="/curl_example" host=myherokuapp.com request_id=51c138b5-ed30-4d4b-aa61-b477de875695 fwd="75.143.171.231,107.178.224.13" dyno=web.1 connect=0ms service=19ms status=400 bytes=179
2016-11-09T16:43:37.960171+00:00 app[web.1]: person=%7Blast_name%3Dblah,+first_name%3Dtest%7D
我可以运行此curl命令并成功发布数据:

curl -X POST -d "person[first_name]=john" -d "person[last_name]=doe" https://myherokuapp.com/curl_example
这里还有我在Rails中的控制器

class PeopleController < ApplicationController
  before_action :set_person, only: [:show, :edit, :update, :destroy]
  skip_before_action :verify_authenticity_token, :only => [:curl_post_example]
...
  def curl_post_example
    Person.create(person_params)
    render plain: "Thanks for sending a POST request with cURL! Payload: #{request.body.read}"
  end
...
class PeopleController[:curl\u post\u示例]
...
def curl_post_示例
Person.create(Person_参数)
简单呈现:“感谢您使用cURL!Payload:#{request.body.read}发送POST请求”
结束
...

如果使用“application/json”内容类型,则应将有效负载字符串化。 或者省略内容类型,然后将其传输为“application/x-www-form-urlencoded”


我不确定Rails应用程序期望的是什么,但当前请求无效,因为它需要一个json字符串。

如果使用“application/json”内容类型,则应将负载字符串化。 或者省略内容类型,然后将其传输为“application/x-www-form-urlencoded”


我不确定Rails应用程序需要什么,但当前请求无效,因为它需要一个json字符串。

这是我的完整解决方案,另请参阅文档


这是我的完整解决方案,另请参见Doc


谢谢,J,这很有效。我将在下面为后代添加我的完整解决方案。谢谢J。这很有效。我将在下面为后代添加我的完整解决方案。
function myFunction() {
   var data =
   {
    "person":
     {
      "first_name":"boosy",
      "last_name":"cat"
     }
   };

  var payload = JSON.stringify(data);

  var options =
      {
        "method"  : "POST",
        "payload" : payload,
        "contentType" : "application/json",
        "followRedirects" : true,
        "muteHttpExceptions": true
      };

   var response = UrlFetchApp.fetch("https://myherokuapp.com/people", options);
  Logger.log(response);
}