Bunu Ruby'de her zaman görüyorum:
require File.dirname(__FILE__) + "/../../config/environment"
Ne anlama __FILE__geliyor?
Bunu Ruby'de her zaman görüyorum:
require File.dirname(__FILE__) + "/../../config/environment"
Ne anlama __FILE__geliyor?
Yanıtlar:
Geçerli dosya adına bir referanstır. Dosyada foo.rb, __FILE__olarak yorumlanır "foo.rb".
Edit: Ruby 1.9.2 ve 1.9.3 Luke Bayes'in yorumunda söylediklerinden biraz farklı davranıyor gibi görünüyor . Bu dosyalarla:
# test.rb
puts __FILE__
require './dir2/test.rb'
# dir2/test.rb
puts __FILE__
Koşu ruby test.rbçıkacak
test.rb
/full/path/to/dir2/test.rb
`__FILE__`için yazın __FILE__.
Değeri, __FILE__dosyanız yüklendiğinde oluşturulan ve depolanan (ancak hiçbir zaman güncellenmeyen) göreli bir yoldur. Bu Dir.chdir, uygulamanızın başka bir yerine herhangi bir çağrınız varsa bu yolun yanlış genişleyeceği anlamına gelir .
puts __FILE__
Dir.chdir '../../'
puts __FILE__
Bu soruna geçici bir çözüm __FILE__, herhangi bir uygulama kodunun dışında genişletilmiş değerini depolamaktır . Sürece olarak requireekstrelerinin bulunduğu tanımları üst kısmında (veya çağrılmadan önce en azından Dir.chdir), bu değer dizinleri değiştirdikten sonra yararlı olmaya devam edecektir.
$MY_FILE_PATH = File.expand_path(File.dirname(__FILE__))
# open class and do some stuff that changes directory
puts $MY_FILE_PATH
This means that if you have any calls to Dir.chdir anywhere else in your application, this path will expand incorrectly.Testimde yol doğru genişledi. Benim yakut sürümü 2.3.7, belki daha yeni yakut sürümü bu sorunu düzeltti.
__FILE__ yürütülmekte olan kodu içeren dosya uzantısına sahip dosya adıdır.
In foo.rb, __FILE__"foo.rb" olurdu.
Eğer foo.rbdir vardı /home/josho File.dirname(__FILE__)zaman dönecekti /home/josh.
Ruby'de, Windows sürümü zaten, sadece kontrol ettim ve __FILE__dosyanın tam yolunu içermiyor. Bunun yerine dosyanın yürütüldüğü yere göre yolu içerir.
PHP __FILE__tam yoludur (Bence tercih edilir). Bu nedenle, yollarınızı Ruby'de taşınabilir hale getirmek için bunu gerçekten kullanmanız gerekir:
File.expand_path(File.dirname(__FILE__) + "relative/path/to/file")
Ruby 1.9.1'de __FILE__dosyanın tam yolunu içerdiğini, yukarıdaki açıklamanın Ruby 1.8.7'yi kullandığım için olduğunu belirtmeliyim.
Hem Ruby 1.8.7 hem de 1.9.1 (1.9 hakkında emin değilim) ile uyumlu olabilmek için yukarıda gösterdiğim yapıyı kullanarak dosyalara ihtiyacınız var.
File.expand_path(File.dirname(__FILE__) + "/relative/path/to/file")
File.expand_path( File.join( File.dirname(__FILE__), "relative", "path", "to", "file") )