Nervesで出続けるtzdataのエラーを止めた

2 min読了の目安(約1300字TECH技術記事

Nervesを使って時間をあつかうプログラムを書いていた場合、RinLogger.attachしてログを表示した際にtzdataの書き込みエラーが表示される場合があります。

たちが悪いのが、n秒に一回書き込みしようとしてエラーが出るのでログがとても見づらくなります。

エラーの例

  • Nerves(RinLogger.attach)のログ
07:44:10.633 [error] GenServer :tzdata_release_updater terminating
** (File.Error) could not write to file "/srv/erlang/lib/tzdata-1.0.3/priv/latest_remote_poll.txt": read-only file system
    (elixir 1.10.2) lib/file.ex:1050: File.write!/3
    (tzdata 1.0.3) lib/tzdata/data_loader.ex:44: Tzdata.DataLoader.last_modified_of_latest_available/1
    (tzdata 1.0.3) lib/tzdata/release_updater.ex:81: Tzdata.ReleaseUpdater.loaded_tzdata_matches_remote_last_modified?/0
    (tzdata 1.0.3) lib/tzdata/release_updater.ex:42: Tzdata.ReleaseUpdater.poll_for_update/0
    (tzdata 1.0.3) lib/tzdata/release_updater.ex:19: Tzdata.ReleaseUpdater.handle_info/2
    (stdlib 3.12.1) gen_server.erl:637: :gen_server.try_dispatch/4
    (stdlib 3.12.1) gen_server.erl:711: :gen_server.handle_msg/6
    (stdlib 3.12.1) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message: :check_if_time_to_update
State: []

解決方法1(確認済み)

config/config.exsファイルに次の行を追記すればエラーがでなくなりました。

  • config/config.exs
config :tzdata, :data_dir, "/root/tzdata"

解決方法2(未確認)

このような方法もあるようですが、こちらは未確認でdisabledにした時の副作用がきになるところ。

  • config/config.exs
config :tzdata, :autoupdate, :disabled