TL;DR
Railsアプリで使用しているJavascriptで読み込んでいるAPIキーを変更したのに切り替わらなくて半日を無駄にした話(解決済)
状況
Ruby on Rails 5アプリ内で使用しているJavascriptへerbとして環境変数からAPIキーを読み込むようにしていた。
イメージとしては以下のような感じ。
# .envなど、環境変数を設定できるようなファイル内
API_KEY=sampleApiKey
function() {
// 略
api_key=<%= ENV['API_KEY'] %>
// 略
}
検証環境に開発環境のAPIキーを環境変数で入れてしまっていたため環境変数を修正した。
が、Passengerを再起動しようがNginxを再起動しようがsource
コマンドを打とうが、
なんならサーバごと再起動しようが 変更前のAPIキーで動いてしまっていた。
ちなみに検証環境では本番同等の環境ということで RAILS_ENV=production
で動かしている。
勘の良い皆様ならもうお気づきでしょう、precompileの存在に......
結論
設定にもよりますが、一般的にproductionモードでRailsアプリを起動する前にはprecompileを行います。
precompileが何って人は公式を確認いただければと思います。
参照:アセットパイプライン - Railsガイド
今回も検証環境へデプロイを行った際にprecompileが走っていたのですが、
その時点での環境変数=変更前の環境変数をjsへ取り込んでしまっていたようです。
そりゃ環境変数書き換えても意味ないですよね。
precompileがjsをminify & uglifyしてくれるのは知っていましたが、
環境変数を埋め込むタイミングを見誤っていました。
解決策
precompileし直せばいいだけの話なので、手動で行う際はrailsのProductionで手動でPrecompileし直すを参考に実施すれば良いです。
今回は再デプロイを行うことで解消しました。
終わりに
普段はCI/CDツールでGitHubの特定ブランチへマージした段階で自動デプロイが走り、
その際にprecompileを行う設定にしていたので完全に頭から抜けていました。
焦るとなかなか当たり前のことでも気づけないものですね。