環境
macOS
Ruby 2.6.5
Rails 6.0.3.2
概要
RailsアプリケーションでPayjpを使用しました。
その際に環境変数の設定方法がわからなかったので備忘録として残しておこうと思います。
達成したいゴール
Payjpを通して環境変数の取り扱いができるようになること。
解決したい問題
秘密鍵や公開鍵をコードに直張りするのはセキュリティの都合上よくありません。
そのため、環境変数を用いて秘密鍵と公開鍵を取り扱ってみたいと思います。
環境変数
環境変数は、Railsからは ENV['<環境変数名>'] という記述でその値を利用することができます。
ローカル環境
Catalina以降であれば、
アプリケーション名 % vim ~/.zshrc
Catalina以前であれば、
アプリケーション名 % vim ~/.bash_profile
ターミナルにて上記を実行。
//まず「i」を押して入力モードにします
export PAYJP_ACCESS_KEY='sk_test_*************'
export PAYJP_PUBLIC_KEY='pk_test_*************'
// その後、escキーを押して:wqで.zshrcから抜けます
アプリケーション名 % source ~/.zshrc
sourceコマンドは、ファイルに書かれたコマンドを現在のシェルで実行するというコマンドです。
主にシェルの設定ファイルを反映させる際に使用します。
環境変数を変えただけでは、railsは変更前の環境変数しか読み込みません。
そのため、アプリケーションを起動している場合には一度終了します。
そして、環境変数を修正したターミナルで再度、rails sでログインし直します。
設定した環境変数を扱うためにはコントローラーに下記のような形で記載していきます。
# クレジットカードの保存
def create
Payjp.api_key = ENV["PAYJP_PRIVATE_KEY"]
if params['payjp-token'].blank?
render :new
else
customer = Payjp::Customer.create(
card: params['payjp-token'],
metadata: {user_id: current_user.id}
)
@card = Creditcard.new(
user_id: current_user.id,
customer_id: customer.id,
card_id: customer.default_card
)
if @card.save
redirect_to root_path, notice: "クレジットカードが登録されました"
else
render :new, notice: "クレジットカードの登録に失敗しました"
end
end
上記の例文は、フォームに入力したクレジットカード情報をトークン化して保存するための処理です。
本番環境
また、ローカル環境と本番環境では、環境変数を設置するファイルが異なります。
[ec2-user ~]$ sudo vim /etc/environment
//まず「i」を押して入力モードにします
PAYJP_ACCESS_KEY='sk_test_*************'
PAYJP_PUBLIC_KEY='pk_test_*************'
// その後、escキーを押して:wqで/etc/environmentから抜けます
exit
// 再度sshでec2にログイン
ローカル環境同様、環境変数を設定・修正した際にはunicornの再起動、もしくは再デプロイが必要となります。
終わりに
この記事が少しでもお役に立てる内容になっている幸いです。
参考:
https://wa3.i-3-i.info/word11788.html
https://qiita.com/Richelieu/items/b872dfce81124084b199#%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%80
https://qiita.com/suzy1031/items/7964829086eb929471a6