2010-09-21 39 views
6

Tôi đang cố gắng bao gồm tệp mã nguồn khi tôi chạy irb nhưng irb không thể tìm thấy nó.Đường ray irb thư mục mặc định

Ví dụ, nói rằng tôi đang ở thư mục sau trong terminal:

/dan/rubyapp/ 

Giả sử tôi có một file có tên "firstapp.rb" trong/dan/rubyapp/

tôi khởi động IRB và từ dấu nhắc irb tôi nhập

> require "firstapp.rb" 

nhưng không thể tìm thấy tệp. Nếu tôi gõ "Dir.pwd" nó cho thấy là

/dan/rubyapp/ 

Cách duy nhất tôi có thể nhận được "yêu cầu" để làm việc được nếu tôi bao gồm đường dẫn đầy đủ như vậy

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

Đó có phải là cách duy nhất Tôi có thể làm việc này? Tất cả các hướng dẫn tôi thấy trực tuyến chỉ đơn giản là làm "yêu cầu file_name" vì vậy tôi giả định nó sẽ làm việc.


đây là sản phẩm từ $: tại 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"] 

Trả lời

2

Một vài điều để thử:

1) Thả rb từ ngày kết thúc yêu cầu của bạn vì vậy bạn phải:

require 'firstapp' 

Bạn thường không thêm .rb vào yêu cầu (chỉ tải) - xem chi tiết tại đây: http://www.fromjavatoruby.com/2008/10/require-vs-load.html

2) Không thực hiện điều đó, chắc chắn rằng thư mục hiện hành là trên con đường tải của bạn - trong IRB thực hiện:

p $: 

và nó sẽ in ra con đường tải ruby ​​của bạn - kiểm tra cho một mục nhập cho". " (Tôi là mục nhập cuối cùng)

+1

đang làm" $ LOAD_PATH << '.' "trong myirbrc cách tốt nhất để làm điều này? – iljkj

+0

Vì vậy, không có trong đó? Bạn có thể hiển thị kết quả của bạn từ p $: – Ash

+0

Xin lỗi, Tôi đã phải tự thêm nó vào tập tin .irbc của tôi thông qua "$ LOAD_PATH << '.'" .Tôi sẽ đăng những gì $ của tôi: trông giống như trước khi thêm nó trong một chỉnh sửa Câu hỏi của tôi: – iljkj

7

Vấn đề là thư mục làm việc hiện tại không còn trong đường dẫn của bạn (như của Ruby 1.9.2). Có một vài cách khác nhau xung quanh vấn đề.

1) Trong một tệp ruby, bạn có thể sử dụng phương thức require_relative thay vì yêu cầu. Điều này sẽ tải một tập tin tương đối so với loaction của tập tin có chứa các phương pháp require_relative: http://extensions.rubyforge.org/rdoc/classes/Kernel.html

require_relative 'firstapp.rb' 

này, tuy nhiên, sẽ không làm việc trong IRB.

2) Tùy chọn khác của bạn là bao gồm đường dẫn hiện tại trong đối số của bạn cho phương thức yêu cầu. Điều này sẽ làm việc trong irb hoặc trong một tập tin ruby. Ví dụ:

require './firstapp.rb' 

Lý do này đã được thực hiện trong ruby ​​là để tránh vô tình đòi hỏi các tập tin sai nếu có tập tin khác nhau có cùng tên trong thư mục khác nhau trong đường dẫn (tương tự như cách * nix không bao gồm thư mục hiện tại "."trong con đường của nó)

+1

Điều này đã giúp tôi! Để tôi làm việc, tuy nhiên, tôi phải sử dụng dấu gạch chéo, vì vậy 'require './firstapp.rb'' sẽ thích hợp hơn. –

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