На практике возникают случаи, когда приходится запускать rails console на удаленной машине и переопределять методы на время сессии.

Неудобства:

  • задержки при наборе
  • неудобно набирать многострочный код
  • неудобно редактировать выполненный ранее многострочный код

Можно, конечно, набрать необходимый код локально в любимом редакторе, копировать и вставить этот код в консоль. Но при таком подходе могут возникнуть проблемы с интерпретацией команд irb или pry.

Решение:

  1. Создаем локально файл /tmp/my_patch_name.rb
class MyClassWithBug
  # создаем алиас для изначального метода
  alias old_my_method my_method unless defined? old_my_method

  # пропатченный метод
  def my_method
    # fixed code
  end
end
  1. Копируем созданный файл на удаленный хост
scp /tmp/my_patch_name.rb user@remotehost:/tmp/
  1. Выполняем в консоли
def load_patch; Kernel.load('/tmp/my_patch_name.rb'); end

load_patch

# тестируем
MyClassWithBug.new.my_method

Готово!

При необходимости повторного редактирования, копируем файл, вызываем load_patch.

Дополнительно получили отсутствие многострчного кода в истории консоли.