Rails config/secrets.yml の環境変数がfloat型になる時の対処法
困ったこと
Railsで Slack OAuth 認証を実装していたら、Slack の client_id が 4167427656.251487306806
のような 数字 + .(ドット) + 数字
の形式が使われてた。
client_id は環境変数として使いたかったため
SLACK_CLIENT_ID='4167427656.251487306806'
のように設定し secrets.yml には次のように書く
shared:
client_id: <%= ENV['SLACK_CLIENT_ID'] %>
そして、Railsで値を呼ぼうとすると
> Rails.application.secrets.client_id
=> 4167427656.2514873
のように設定した値と異なって表示されてしまう。
原因
型を確認してみると
> Rails.application.secrets.client_id.class
=> Float
となっていて、Float型で読み込まれてしまっており、浮動小数点数の精度の影響で期待した値にならなかった。
解決策
String型で読み込めるように書いてあげる。
shared:
client_id: "<%= ENV['SLACK_CLIENT_ID'] %>"
こうすることで正しく文字として呼び出せる。
> Rails.application.secrets.client_id
=> "4167427656.251487306806"
あんまり、このような書き方で環境変数を呼んだことがなかったのでハマってしまった。 他の書き方で良さそうなものがありましたら教えてください。