2010-10-09 20 views
24

Tôi đang gặp vấn đề với việc nhập tệp trong Ruby. Tôi đang tạo một ứng dụng Ruby trong Windows XP. Tất cả các tệp lớp cho ứng dụng đều có trong "C:/Documents/Prgm/Surveyor_Ruby/lib". Nhưng khi tôi require một tệp trong một tệp khác, cả ruby ​​lẫn irb đều không thể tìm thấy tệp được yêu cầu.Cả ruby ​​lẫn irb đều không thể tải tệp .rb trong thư mục hiện tại

Nội dung thư mục hiện tại:

C:\Documents\Prgm\Surveyor_Ruby\lib>dir 
Volume in drive C has no label. 
Volume Serial Number is AAAA-BBBB 

Directory of C:\Documents\Prgm\Surveyor_Ruby\lib 

10/09/2010 06:32 PM <DIR>   . 
10/09/2010 06:32 PM <DIR>   .. 
10/08/2010 03:22 PM    5,462 main (commented).rb 
10/08/2010 03:41 PM    92 question.rb 
10/08/2010 09:06 PM    2,809 survey.rb 
10/09/2010 06:25 PM    661 surveyor.rb 
10/08/2010 01:39 PM    1,546 test.rb 
       5 File(s)   10,570 bytes 
       2 Dir(s) 40,255,045,632 bytes free 

nhận rằng IRB là ở đúng thư mục:

C:\Documents\Prgm\Surveyor_Ruby\lib>irb 
irb(main):001:0> Dir.pwd 
=> "C:/Documents/Prgm/Surveyor_Ruby/lib" 

... chưa IRB không thể tải survey.rb:

irb(main):002:0> require 'survey' 
LoadError: no such file to load -- survey 
     from <internal:lib/rubygems/custom_require>:29:in `require' 
     from <internal:lib/rubygems/custom_require>:29:in `require' 
     from (irb):2 
     from C:/Ruby192/bin/irb:12:in `<main>' 
+2

Ngoài giải pháp hàng đầu, 'require './Survey'' cũng sẽ hoạt động. Về cơ bản, thư mục hiện tại của bạn không thực sự nằm trong đường dẫn tìm kiếm theo mặc định, do đó bạn phải trỏ ruby ​​vào nó một cách rõ ràng hoặc bao gồm nó trong đường dẫn tìm kiếm. –

Trả lời

2

Tôi tin rằng cả hai bài viết trước là chính xác, chỉ cho các mục đích sử dụng khác nhau. Trong IRB, hãy sử dụng đường dẫn tuyệt đối với require, với một tệp bạn cũng có thể sử dụng require với đường dẫn tuyệt đối hoặc sử dụng require_relative.

9

Nhận thấy hành vi tương tự nhưng nguồn gốc Linux của tôi đã cho tôi thử: .\file.rb và được tải vào trong. Hãy thử khai báo một cách rõ ràng thư mục hiện tại.

+0

Điều này chỉ hoạt động nếu thư mục hiện tại xảy ra là thư mục chứa cả hai tệp. –

3

nó damn bẩn, nhưng bạn luôn có thể làm tại dòng đầu tiên:

$: << '.' 

và bạn tắt đi với pwd'ed yêu cầu. Đó là khá hữu ích cho tương tác kiểm tra/sáng tạo với IRB

+0

Cảm ơn vì điều này. Tôi không biết tại sao yêu cầu không làm việc cho tôi. –

58

Không ai trong số những hoạt động đối với tôi, nhưng điều này đã làm:

irb -I . 
>require 'file' 
=> true 
+1

+1 Điều này chắc chắn hoạt động. – WattsInABox

+0

Kiểm tra giải pháp của tôi, nó đặc biệt tốt khi bạn không kích hoạt IRB bằng '-I'' để đặt' pwd' làm thư mục '$ LOAD_PATH'. – Darme

+0

Tính năng tuyệt vời của 'irb'! – Dan

1

Nếu bạn đang cố gắng làm điều này với rvmsudo, tôi thấy điều này làm việc cho tôi :

rvmsudo irb -I '/Absolute/path/to/your/project' 
8

Làm thế nào về lệnh này? Một cồng kềnh chút để viết nhưng thực sự sạch sẽ và nó sẽ luôn luôn làm việc:

 
➜ $ irb 
> require "#{Dir.pwd}/file_to_load.rb" 
=> true 
9
require './hede' 

hoặc

require_relative 'hede' 

này làm việc cho tôi trong cả hai Ruby (1.9.3) và JRuby (1.7.x) trên Linux. Tôi chưa thử nghiệm nó trên cửa sổ.

Các vấn đề liên quan