Rails нужен IRB?

Я слежу за обзором RoR Майкла Хартла, и есть несколько мест, где он использует IRB, часто для добавления пользователей в базу данных. Когда я использую rails console для открытия IRB, а затем создаю пользователя в базе данных, все работает нормально, но если я попытаюсь сделать то же самое, запустив ту же строку кода из файла, такого как test.rb, в каталоге моего приложения, это не сработает. работайте, потому что он говорит, что не может найти модель пользователя. Можно ли каким-либо образом запустить эти строки кода (т. е. для помещения пользователя в базу данных) из файла .rb, а не из IRB?


person Kvass    schedule 18.06.2011    source источник
comment
Вам нужно загрузить среду ..   -  person Mohit Jain    schedule 18.06.2011
comment
как я это сделал? IRB делает это автоматически, но какой синтаксис использовать, если я не использую IRB?   -  person Kvass    schedule 18.06.2011


Ответы (3)


Для отдельного скрипта загляните в rails runner. Он загружает серверную часть Rails, поэтому у вас есть доступ ко всем моделям и существует для этой цели.

Из "руководств по Ruby on Rails":

runner запускает код Ruby в контексте Rails неинтерактивно. Например:

$ rails runner "Model.long_running_method"

person the Tin Man    schedule 18.06.2011

Если вы просто используете test.rb для удобства сохранения и повторного запуска консольных команд, вы можете сделать это:

rails console < test.rb

Или, в качестве хака, поместите это вверху вашего test.rb:

require 'config/environment'

И вызовите его из корневого каталога приложения следующим образом:

ruby -I . test.rb
person Rob Davis    schedule 18.06.2011
comment
для этого подхода он говорит «Переключиться в режим проверки». а потом выходит. - person Kvass; 19.06.2011
comment
rails console < test.rb, в моем случае, сообщает, что он переключается в режим проверки, а затем выполняет команды, как если бы я их набрал. Но мне больше нравится ответ rails runner. - person Rob Davis; 19.06.2011

Размещение файла ruby ​​в папке вашего приложения не приводит к автоматической загрузке вашего приложения Rails. Вам нужно явно загрузить файл config/environment.rb, чтобы загрузить приложение Rails.

Если ваш test.rb находится в корне вашего приложения, вы можете сделать что-то вроде

require File.expand_path("../config/environment", __FILE__)
# Access your models here
person Dogbert    schedule 18.06.2011