2017-09-07 5 views
0

私は最初のbashスクリプトを書いていて、Heroku環境変数をcurlで設定しようとしています。しかし、私のデータが無効なJSONであると言って、Herokuからの不正なリクエストエラーが発生しています。私はなぜ、理解していない。bash - HerokuにカールするときのJSONが無効

まず第一に、私のbashスクリプト:

#!/bin/bash 

GIT_COMMIT=`node get_git_commit.js` 

echo $GIT_COMMIT 

curl -n -X PATCH https://api.heroku.com/apps/my-app-name/config-vars \ 
    -d '{ 
    "GIT_COMMIT": $GIT_COMMIT 
}' \ 
    -H "Content-Type: application/json" \ 
    -H "Accept: application/vnd.heroku+json; version=3" 

のJavaScriptファイル、get_git_commit.jsこのスクリプト参照:

const fs = require("fs") 

require("child_process").exec("git rev-parse HEAD", (err, stdout) => { 
    const commit = stdout.replace(/\n/g, "") 
    console.log(`"${commit}"`) 
} 

私はbashスクリプトを実行すると、echoが正しくコンソールにGitのハッシュを印刷しますしかし、Herokuが返すのは

{ 
    "id":"bad_request", 
    "message":"Provided data is invalid JSON." 
} 

です手動でデータを手動で設定しただけでは、完全に機能していました。

私はbashを書くのが全く新しいので、多分、私が見逃しているいくつかの基本的な慣習があります - どんな指針も高く評価されるでしょう。

答えて

0

SLaksが指摘したように、これは引用の問題でした。私は二重引用符でハッシュ文字列をコミットgitのを準備していたが、それはbashスクリプトで追加の単一引用符のラッパーを必要 -

"GIT_COMMIT": "'"$GIT_COMMIT"'" 

はそれをやったこと!

1

$GIT_COMMITおそらく数値ではありません。

{ "GIT_COMMIT": 4d2fb }のようなものを送信している可能性があります。これは有効なJSONではありません。

文字列を引用符で囲む必要があります。

+0

あなたは間違いなく(私はハッシュが厳密に数字でないことを忘れていました)、 '$ GIT_COMMIT'を引用符で囲むようにしました - ' console.log( '" $ {stdout} "') 'in JSファイル - しかし、それでも同じエラーが発生しました( 'echo'に引用符が含まれていました)。 – skwidbreth

+0

正確なリクエストボディとは何ですか? – SLaks

関連する問題