2017-06-17 8 views
4

私はHerokuで展開しようとしているWebアプリケーションを持っています。 Google Cloud StorageにアクセスするためにGoogle Cloud Node.jsライブラリを使用しています。Heroku Config VarにGoogleクラウドサービスアカウントのコンテンツを設定するキーファイル

const gcs = require('@google-cloud/storage')({ 
    projectId: 'my-project-ID', 
    credentials: process.env.GCS_KEYFILE 
}); 

GCS_KEYFILEが確認を働いたことを確認するためにダッシュボードをチェックheroku config:set GCS_KEYFILE="$(< /my/file.json)"

を使用して、私はHerokuのコマンドラインツールを使用して設定した設定変数である:私は私のサーバーのファイルの先頭に次きましたJSONファイルの内容はconfig varに設定されています。スクリーンショットは、次のようになります。 はenter image description here

私はgcsで何かをしようとすると、私が手にエラーがある:それははっきりしているため意味がありません

Error: Could not authenticate request 
The incoming JSON object does not contain a client_email field 

を。 json自体は問題ありません。私は、Google Cloudから直接ダウンロードを取り込み、それを変更しませんでした。私はconst gcs宣言でkeyFileNameを試してみましたが、ENAMETOOLONGエラー(とにかくJSONファイルへのパスを指定するのにthe docs say thats)があります。 keyFileNameを使用してJSONファイルへのパスを指定するとローカルで動作しますので、JSON自体は問題ではないと確信しています。

なぜこのエラーが発生するのですか?または、HerokuのGoogleからJSON Keyfilesを処理する良い方法がありますか?

答えて

4

herokuまたは任意の場所の環境変数は文字列です。

そのGoogleのAPIのコンストラクタは、あなたが戻ってJSONに変換するために、このような何かをする必要があるかもしれませんJSONオブジェクトを取る場合:そう単純

const gcs = require('@google-cloud/storage')({ 
    projectId: 'my-project-ID', 
    credentials: JSON.parse(process.env.GCS_KEYFILE) 
}); 
+0

うわ、!迅速な返信をありがとう、私はあなたがすぐに私を許可するようにあなたの答えを受け入れるよ。 – quicklikerabbit

関連する問題