【Rails6】環境変数を正しく設定したのに取得できない時は

この記事の概要


環境設定で、例えば外部サービスと連携するときにAPIキーやトークンを環境変数に保存してデプロイするときに、環境変数がエラーだよって言われる時は、' ', " ", ←こいつらを見直そう

Rails6(自分の場合はそうでしたが)に限った話ではないと思われるので、例えばlaravelを使っている人(laravelほとんど触ってないので分かりませんが)とかにも当てはまると思います。多分。

目次

  • この記事の概要
  • 目次
  • 環境
  • 自分が直面した課題
  • やってみたこと
  • 対処法
  • まとめ
  • 参考文献

環境

・mac OS catarina 10.15.1 Beta
・Rails 6.0.0
・heroku

自分が直面した課題

やろうとしことは、PayJP( https://pay.jp/ ) という、オンライン決済プラットフォームを自社のサービスに導入しようとした事だ。Pay JP にはcheckoutという機能があり、なんといっても最大の特徴はjavaScriptのコード一つで、決済画面が実装できる事だ。もちろん、Railsのコントローラとデータを紐づける必要性はあるが、それでもプロが作ったUIライブラリと複雑な決済処理を、javaScriptのコード一つで実装できるのは、なかなか画期的で凄いことに思える。

<script
  type="text/javascript"
  src="https://checkout.pay.jp/"
  class="payjp-button"
  data-key="pk_test_0383a1b8f91e8a6e3ea0e2a9"
  data-submit-text="トークンを作成する"
  data-partial="true">
</script>

Pay.jpには日本語リファレンスも用意されている(ありがたい😂)ので、興味のある方は(https://pay.jp/docs/checkout)から覗いてみては、いかがだろうか。

やってみたこと

さて話が脱線したが、実装方法をまとめたこちらのQiitaの記事(https://qiita.com/nobu0717/items/52b744350ef24047e1c1)より、

Payメソッド
   def pay
       Payjp.api_key = ENV["PAYJP_SECRET_KEY"]
       Payjp::Charge.create(
        :amount => params[:amount],
        :card => params['payjp-token'],
        :currency => 'jpy'
      )
end
を実装しようとしたときのこと。

上記コードの
     Payjp.api_key = ENV["PAYJP_SECRET_KEY"]
で、 エラーが発生してしまった。

そこで、ターミナルから

          $env | grep PAYJP_SECRET_KEY

コマンドを叩いてgrepしてみるも、どうやら変数の中身は空の模様。

そこで、

   $  heroku config:add PAYJP_SECRET_KEY="pk_live_XXXXXXXXXXXXX"

を叩いてみる。

get で取得してみる。

   $  heroku config:get PAYJP_SECRET_KEY

> "pk_live_XXXXXXXXXXXXXXXXX"

お!うまくいってそう!

→でもデプロイしたら、認識されない、、、



今度は、" "を' 'にしてやってみる。(ダブルクオーテーョンをシングルクオーテーションに)

   $  heroku config:add PAYJP_SECRET_KEY='pk_live_XXXXXXXXXXXXX'

を叩いてみる。

get で取得してみる。

   $  heroku config:get PAYJP_SECRET_KEY

> 'pk_live_XXXXXXXXXXXXXXXXX'

お!うまくいってそう!

→でもデプロイしたら、認識されない、、、


なんでーーーーーーと、思って色々と調べてみたが、それを書いている記事は見つからず。orz

対処法

出力結果をよくみてみる
→ " " で 囲 ま れ て い る で は な い か !

試しに、" "を外して、

   $  heroku config:add PAYJP_SECRET_KEY=pk_live_XXXXXXXXXXXXX

と打ってみる。

get で取得してみる。

   $  heroku config:get PAYJP_SECRET_KEY

> pk_live_XXXXXXXXXXXXXXXXX

" "ダブルクオーテーョンが外れた!

今度はうまくいきました。
4時間ほど悩んだ問題だったので、解決して良かった。。。

参考文献

・Pay.jp
・Pay.jp checkout
・Railsで単発決済システム(Pay.jpを実装)
https://qiita.com/nobu0717/items/52b744350ef24047e1c1





コメント

このブログの人気の投稿

【Unity】シーンギズモがデフォルトで表示されない時

【Swift4】argument passed to call that takes no arguments の解決策

【Swift4】iOSシミュレータでカメラとフォトライブラリが起動しない?試してみてわかったこと