LoginSignup
7
0

More than 3 years have passed since last update.

Railsアプリに環境変数の変更を反映できなかった話

Last updated at Posted at 2020-12-10

TL;DR

Railsアプリで使用しているJavascriptで読み込んでいるAPIキーを変更したのに切り替わらなくて半日を無駄にした話(解決済)

状況

Ruby on Rails 5アプリ内で使用しているJavascriptへerbとして環境変数からAPIキーを読み込むようにしていた。
イメージとしては以下のような感じ。

# .envなど、環境変数を設定できるようなファイル内
API_KEY=sampleApiKey
call_api.js.erb
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を行う設定にしていたので完全に頭から抜けていました。
焦るとなかなか当たり前のことでも気づけないものですね。

7
0
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
7
0