Как я могу перезагрузить скрипт в IRB? - PullRequest
60 голосов
/ 08 января 2011

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

Я нашел метод в этой теме , но это, очевидно, относится только к файлам гемов. Мое требование требует выглядит так

 require "#{File.expand_path(__FILE__)}/../lib/query"

РЕДАКТИРОВАТЬ: попробовав load вместо require, я все еще не мог заставить его работать. Я не могу остановить эти ошибки.

ruby-1.9.2-p0 > load "#{File.expand_path(__FILE__)}/../lib/query.rb"
LoadError: no such file to load -- /Users/newuser/Dropbox/Sites/rails/hacknyc/(irb)/../lib/query.rb

Ответы [ 4 ]

96 голосов
/ 08 января 2011

В irb File.expand_path(__FILE__)} просто вернет "#{path you ran irb from}/(irb)".Который создает путь, который на самом деле не существует.К счастью, все пути к файлам относительно того, где вы запустили irb.Это означает, что все, что вам нужно, это:

load "lib/query.rb"

Если вы хотите использовать __FILE__ в реальном файле, это нормально, но не ожидайте, что он даст правильный путь в irb.Поскольку в irb вообще нет «файла», поэтому он вообще не может вернуть действительный путь.

Также, __FILE__ будет работать нормально, если используется в файле, загруженном в irb через load или require.Потому что это своего рода для чего.

39 голосов
/ 08 января 2011

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

3 голосов
/ 08 января 2011

в соответствии с по этой ссылке вам нужно загрузить свой файл и не забыть расширение.

Вот еще более интересная версия для использования на эта ссылка номер 2 это может быть полезно и вам.

Возможно, вы захотите попытаться выяснить, почему ваша консоль rails не работает для вас.

1 голос
/ 08 января 2011

Я думаю load - это то, что вы ищете.

...