Подтвердить что ты не робот

Ruby: требует файла снова, если он изменен

Я написал гем, который выглядит в config/ для файла конфигурации. Это работает нормально, но если пользователь изменяет какую-либо конфигурацию, он должен остановить программу и запустить ее снова, прежде чем мой драгоценный камень загрузит новую конфигурацию. Это потребовало бы, чтобы они перезапускали все приложение rails при каждом изменении, что не идеально.

Есть ли способ "повторно потребовать" файл, чтобы он загружал его свежим вместо использования кэшированной версии.

4b9b3361

Ответ 1

Вы можете использовать load вместо require. Это загрузит файл независимо от того, была ли он уже загружена раньше. Обратите внимание, что при load вам нужно указать расширение .rb, которое необязательно с require. Итак, require "path/to/myconfig" становится load "path/to/myconfig.rb".

Обратите внимание, что это не будет определять значение, определенное предыдущей конфигурацией. Поэтому, если конфигурация изменена с $verbose = true; $debug = true на $verbose = false, тогда $verbose будет false, но $debug будет по-прежнему истинным после перезагрузки конфигурации.

Конечно, вам нужно поставить оператор load где-нибудь, где он будет выполняться каждый раз, когда файл конфигурации должен быть перезагружен (т.е. внутри какого-либо метода или hook).