LoginSignup
10
9

More than 3 years have passed since last update.

Rails 本番環境(EC2)でPAY.JPのAPI keyを読み込めないエラー

Last updated at Posted at 2020-05-03

結論

本番環境(EC2)でAPI keyを読み込むためには、/etc/environmentの中にAPI keyを書きこむ必要があります。
(テスト秘密鍵であればsk_testで始まる文字列を直接書く)

経緯

チーム開発でメルカリを模したアプリを開発しています。
・rails (5.2.4.2)
・ローカル環境にてpayjpを使いクレジットカード登録機能を実装。動作確認済。
・ローカルにおいては、クレジットカードコントローラに下記記述をすることで、
 .ENVファイルに記載されたAPI秘密鍵を読み込むことに成功していた。

Payjp.api_key = ENV["PAYJP_PRIVATE_KEY"]

・本番環境にてクレカ登録をすると、登録完了画面に遷移せず、
 Payjp::AuthenticationError in CreditCardsController#payエラーが発生。
 No API key provided.と言われてしまう。(PAY.JPにもクレカ情報が反映されない)

82373d6703aa760746102e6d7aedb3f1.png

一旦たてた仮説

本番環境で.ENVファイルを読み込めていない可能性。

仮説を元に行った作業内容

.ENVファイルを使用するにあたり導入したgem 'dotenv-rails’が、gemfileの適切な箇所に記載されているか確認したが、テスト・開発・本番環境いずれにも対応できる箇所に記載されている。他に思い当たる原因が不明。

その後わかった事

本番環境(EC2)でもAPI keyやmaster_keyを使えるようにするためには、/etc/environmentの中にそれらを書きこむ必要あり。
API keyやmaster_keyはgitignoreされている。デプロイして自動的に本番環境に反映される、というものではない。
本番環境の設定ファイルである/etc/environmentの中に書き込む事で使用可能になる。

参考にさせていただいた記事

おまけ

その後上記の通り/etc/environmentの中に書き込むも、なぜかエラー解消せず。(???)

対応
(.ENVファイルに記載されたAPI秘密鍵を読み込む設定をしていましたが)
credentilas.yml.encから読み込むように、コントローラに下記記載をしたところエラー解消しました。

Payjp.api_key = Rails.application.credentials.payjp[:PAYJP_PRIVATE_KEY]

credentilas.yml.encと/etc/environment それぞれにAPI keyやmaster_keyを記入、
さらにコントローラにおいてはcredentilas.yml.encのAPI keyを読み取らせる記述をする、
という方法が確実かなと思いました。

以上、ご覧いただきありがとうございました!

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9