Каковы причины "перезагрузки!" не всегда работает в консоли Rails?

Я просто получаю консоль Rails и считаю ее полезной для быстрого тестирования методов в моих классах. Я знаю, что могу внести изменения в свои модели, а затем

> reload!

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

В действительно простом псевдо-примере у меня может быть неправильный код в строке 100:

100: u = User.alll

и в консоли Rails, когда я запускаю этот метод, я могу получить ошибку, похожую на:

NoMethodError: undefined method `alll' for User:Class ... on line 100

затем измените мой код, исправив ошибку

100: u = User.all

затем перезагрузите:

> reload!

а затем при вызове метода в этом классе, который имеет правильный код, он все равно скажет

NoMethodError: undefined method `alll' for User:Class ... on line 100

Если ясно, что ошибка исправлена, а строка нарушения даже не указана в строке 100. Есть ли способ заставить /hard - reset "перезагрузить!" команда?

Ответы

Ответ 1

Я предполагаю, что вы делаете что-то вроде:

  • Создайте экземпляр User
  • Вызов someMethod в экземпляре
  • Вы получаете сообщение об ошибке, и вы идете и исправляете его.
  • reload!
  • Вы вызываете someMethod в существующий экземпляр и снова получаете ошибку.

Итак, вы вызываете метод в экземпляре, который не был перезагружен. Его класс перезагружен, но экземпляр уже находится в памяти - с ошибками и всеми.

Это было бы мое предположение, по крайней мере (не на 100% уверен).

Точка, если вы создаете новый экземпляр после reload! и вызываете свой метод в этом новом экземпляре, он должен прекратить жаловаться.