Rails irb каталог по умолчанию - PullRequest
       4

Rails irb каталог по умолчанию

6 голосов
/ 21 сентября 2010

Я пытаюсь включить файл с исходным кодом при запуске irb, но irb не может его найти.

Например, скажем, я нахожусь в следующем каталоге терминала:

/dan/rubyapp/

Предположим, у меня есть файл с именем "firstapp.rb" в / dan / rubyapp /

Я запускаю irb и из командной строки irb набираю

> require "firstapp.rb"

, но файл может 'не может быть найдено.Если я наберу «Dir.pwd», он будет отображаться как

/dan/rubyapp/

Единственный способ, которым я могу получить «require» для работы, это если я включу полный путь, например, так:

> require "/dan/rubyapp/firstapp.rb"

Isчто единственный способ заставить это работать?Все учебники, которые я вижу в Интернете, просто «требуют имя_файла», поэтому я предположил, что это сработает.


вот вывод из $: в irb

ruby-1.9.2-p0 > $:
 => ["/Users/Daniel/.rvm/gems/ruby-1.9.2-p0/gems/wirble-0.1.3/bin", 
"/Users/Daniel/.rvm/gems/ruby-1.9.2-p0/gems/wirble-0.1.3/lib", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.4.0", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby/1.9.1", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.4.0", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1",     
"/Users/Daniel/.rvm/rubies/ruby-
1.9.2-p0/lib/ruby/1.9.1/x86_64-darwin10.4.0"] 

Ответы [ 2 ]

8 голосов
/ 19 января 2011

Проблема в том, что текущий рабочий каталог больше не находится в вашем пути (по состоянию на Ruby 1.9.2).Существует несколько различных способов решения этой проблемы.

1) В самом файле ruby ​​вы можете использовать метод require_relative вместо require.Это загрузит файл относительно локации файла, содержащего метод require_relative: http://extensions.rubyforge.org/rdoc/classes/Kernel.html

require_relative 'firstapp.rb'

Это, однако, не будет работать в irb.

2) Другой вариант - включить текущий путь в ваш аргумент для метода require.Это будет работать в irb или в файле ruby.Например:

require './firstapp.rb'

Причина, по которой это было реализовано в ruby, заключалась в том, чтобы избежать непреднамеренного запроса неверного файла, если в пути есть разные файлы с одинаковыми именами (аналогично тому, как * nix не делаетвключить текущий каталог "." в его путь)

2 голосов
/ 21 сентября 2010

Попробуйте пару вещей:

1) Удалите .rb с конца запроса, чтобы у вас было:

require 'firstapp'

Обычно вы не добавляете .rbк требованию (только к загрузке) - посмотрите здесь более подробную информацию: http://www.fromjavatoruby.com/2008/10/require-vs-load.html

2) Если это не удалось, убедитесь, что текущий каталог находится на вашем пути загрузки - в irb execute:

 p $:

и он распечатает ваш путь загрузки ruby ​​- проверьте наличие записи для "."(моя последняя запись)

...