2011-12-14 15 views
15

Geçerli klasörden bir dosyaya nasıl gerek duyarım?Ruby: Geçerli çalışma dizininden bir dosya nasıl "istenir"?

Ben bir sınıf içeren sql_parser.rb adlı bir dosya var. Ben de aynı klasörde başka dosyada bu dahil etmek istiyorum, bu yüzden kullandı:

LoadError: no such file to load -- sql_parser 

nerede bu klasörde IRB kullanarak çalıştı: Ben bu klasörden çalıştırdığınızda

require 'sql_parser' 

başarısız Yani dosya var ve onu oradan istiyor, ancak aynı sorunu vardı.

güvenlik nedeniyle, @AndrewGrimm tarafından belirtildiği gibi
+1

Ayrıca bkz http://stackoverflow.com/questions/2900370/why-does-ruby -1-9-2-yükleme-yolu-ve-whats-the-alternative – knut

cevap

2
$LOAD_PATH << Dir.pwd 
require 'sql_parser' 

, bunun yerine bu kullanmalısınız:

Kişisel dizin mevcut yük yolunda olmak zorundadır. Yükleme yolu, $LOAD_PATH adlı küresel bir dizide saklanır. Geçerli dizininize eklerseniz, dizindeki herhangi bir dosyayı yüklemek için gerekli olanları kullanabilirsiniz. aksi takdirde işler çirkin olabiliyor gerçekten küçük bir proje olmadığı sürece

Dir.pwd yerine Tin Man

önerdiği gibi pwd .chomp kullanma Ayrıca ben require_relative üzerinden bu tercih ederim.

+0

Şerefe kaldırın. Bu işe yarıyor ama Ruby'nin pwd'ye her zaman bakacağını düşündüm, yanılıyor muyum? –

+0

@Matt Roberts maalesef değil, ama bir raylar uygulamasında çalışıyorsanız, tüm bunlar sizin için ele alınır. – bkempner

+0

@MattRoberts: Ruby versiyonuna bağlı. – knut

3

1.9'da sözdizimi, bu soruya verilen diğer yanıtlarda require_relative olarak değiştirilmiştir.

Eğer Ruby 1.8'de yazıyorsanız, kodunuzu ileriye dönük bir şekilde yazmanızı ve require_relative gem'u kullanmanızı öneririm, böylece bu anahtar kelimeyi Ruby 1.8'inizde kullanabilirsiniz ve 1.9'a geçtiğinizde daha az geçişli bir şeyle başa çıkabilirsiniz.

+0

Bu cevap bir çözüm değil, çözümün bir yorumu olmalı. –

7

Kullanım

$:.unshift File.join(File.dirname(__FILE__)) 

komut dosyası programından yürütülmektedir nerede ziyade, bulunduğu yere göre bir yol alıyoruz sağlamak için. Aksi halde, "."'u yük yolundan kaldırarak elde edilen güvenlik avantajını atıyorsunuz.

(Evet, sorunun başlığını, komut dosyasının çalıştırıldığı dizinde bir dosya gerektirmesi hakkında konuşuyor, ancak sorunun gövdesi, gerekli dosyanın söz konusu komut dosyasıyla aynı klasörde bulunduğundan bahseder)

gerektirir da
+0

Neden "." Kullanıyor daha az güvenli? Ayrıca, neden Dir.pwd değil? (Bu daha özlü ve aynı şeyi başaramıyor mu?) – bkempner

+0

@bkempner: Bu sorunun yorumlar bölümünde bağlantılı olan soruyu okudunuz mu? –

+0

ah, şimdi yaptım, teşekkürler. – bkempner

3

... "./myRubyFile" # bildirimi biz myRubyFile.rb gelen .rb dışlamak

İlgili konular