👾

Invalid API Key: *****ined (EOTD No. 20)

2021/02/05に公開

シチュエーション

本番環境(EC2)の方でクレジットカードの登録をしようとした時にtokenの受け渡しができず。
statusコードは401。認証エラー(auth_error)

エラー文をみてみる。

"Invalid API Key: *****ined"

APIキーがundefinedになっているらしい。

試行錯誤

以前、環境変数の箱をbash_fileからcredentialsに変えてみたりしたが直らなかった。

APIキーが環境変数で呼び出しているので環境変数を確認。(greprails c)
ここでは表示されているので、箱には入っている様子。

だとすると環境変数の変更が反映されていない?
本番環境で改めて設定した後、EC2から一度抜けて入り直す。(これで更新されるはず)

動かない。解決法を調べてみよう。

試したこと

APIキーの再発行

APIキーを再発行して環境変数に設定した後、本番環境で確認。だめだ。

ローカルで試してみるとこちらも動かなくなってしまった。古い方のAPIキーが"Invalid"で表示されている。

spring stop

一番簡単にできそうな対処法がこちら。
spring stopで環境変数のキャッシュをクリアできるらしいという記事を見つけて実行。

bundle exec spring stop
>> Spring is not running.

そもそもSpringは動いていなかった様子。動作は変わらず。

dotenv-rails

これが大本命。
このgemを使うと環境変数で設定するのではなく、gitignoreに指定した.envというファイルからAPIキーを読み込んでくれる。

これを実装した後、ローカルの方が動くようになった。
期待を胸に本番環境で試してみるが撃沈。

SOTD(Summary Of The Day)

結果、問題は解決せず。
ローカル環境で商品の購入をすることはできるようになったけど、EC2の方では依然として無理。
そもそもAPI Keyが"Undefined"なのはなんでだろう。

Discussion