Запустить скрипт в консоли 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')

и локальные переменные будут там после этого.