Запустить скрипт в консоли Rails и иметь доступ к созданным объектам?
недавно я обнаружил, что вы можете запустить произвольный файл Ruby в консоли Rails, используя load или require, как в:
load 'test_code.rb'
это здорово, насколько это возможно, но с использованием нагрузки или require (в чем разница?) Кажется, у меня нет доступа к объектам, созданным в скрипте после его завершения.
например, в моем скрипте у меня может быть что-то вроде:
u = User.where('last_name = ?', 'Spock').first
Если я запускаю консоль rails и запускаю этот скрипт с помощью load или require, я вижу его работая, я вижу, что запрос происходит, и я могу "поместить" атрибуты из объекта внутри скрипта и увидеть их в выходных данных консоли. Но как только скрипт выполнен, переменная u не определена.
Я хотел бы запустить некоторый код, чтобы настроить несколько объектов, а затем исследовать их в интерактивном режиме. Можно ли это сделать? Я делаю что-то не так или упускаю что-то очевидное?
2 ответов
переменные, определенные в вашем скрипте, выйдут из области видимости после загрузки файла. Если вы хотите использовать переменные в консоли, определите их как переменные экземпляра или константы
@u = User.where('last_name = ?', 'Spock').first
или
USER = User.where('last_name = ?', 'Spock').first
как объяснено в http://www.ruby-doc.org/core-2.1.2/Kernel.html#method-i-load:
ни при каких обстоятельствах локальные переменные в загруженном файле не будут распространяться в среду загрузки.
опция для оценки файла:
eval(File.read 'your_script.rb')
и локальные переменные будут там после этого.