ねむい

睡魔と戦うのに忙しいので労働は別な人に任せたい

gem config で定数を書き換えてしまった話

Ruby使いの方々にとっては至極当然なのかも知れないが、gem configで読み込んだSettingsの定数値を書き換えてしまい詰まった。

qiita.com


gem configを使って定数を読み込んだ際、てっきり都度YAMLを読み込んでいるので定数は不変(immutable)だと思い込んでいた。

しかし、下記のようなコードを書いてしまうと内容が変更される。

# settings/development.yml

blog:
  title: 'ねむい'
  author: '黄色'

###############################


# bundle exec rails c -e development
title = Settings.blog.title
puts title #"ねむい"
title.delete


puts Settings.blog.title # nil

Settingsはファイルから値を読み込んだら、解放されるまでメモリにキャッシュされるっぽい。
普通に考えれば、毎度ファイルアクセスが発生してたら遅すぎて致命的だから当然か。