Dosya.("..//.." Gemfile;, ____ DOSYA) expand_path Nasıl oluyor bu iş? Dosya nerde?
ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__)
Sadece bir giriş yapmayı deniyorum .bazı dizin rb dosyası ve öğretici bana bu kodu kullanmak için söyler. ama gem dosya bulma nasıl olduğunu anlamıyorum.
CEVAP
File.expand_path('../../Gemfile', __FILE__)
yolu mevcut dosyaya göre bildiğin bir dosyanın tam yolunu almak için biraz çirkin Ruby bir deyim vardır. Bunu yazmanın başka bir yolu şudur:
File.expand_path('../Gemfile', File.dirname(__FILE__))
hem çirkin, ama ilk versiyon daha kısadır. İlk varyant onu asmak elde edene kadar sezgisel olmayan çok, ancak, aynı zamanda. Neden .. ekstra? (ama ikinci türevi gereken neden bir ipucu olabilir.
Bu nasıl işliyor: 7* *haftanın ilk günü isteğe mutlak yolu, ikinci değişken (varsayılan olarak geçerli çalışma dizinine göre). __FILE__ kodda ise dosya yoludur. Bu durumda ikinci argüman bir dosya için bir yoldur, ve File.expand_path bir dizin olacağı için, bu yolda .. ekstra yol almak için hareket etmek zorundayız. Bu şöyle çalışır:
File.expand_path temelde bu (aşağıdaki kodda path ../../Gemfile değeri olacak relative_to /path/to/file.rb değeri) gibi uygulanır:
def File.expand_path(path, relative_to=Dir.getwd)
# first the two arguments are concatenated, with the second argument first
absolute_path = File.join(relative_to, path)
while absolute_path.include?('..')
# remove the first occurrence of /<something>/..
absolute_path = absolute_path.sub(%r{/[^/] /\.\.}, '')
end
absolute_path
end
(biraz daha fazlası var, ev dizini ~ genişletir ve ... ... muhtemelen de yukarıdaki kod ile başka sorunlar vardır
Stepping araması için yukarıdaki kod absolute_path ilk değeri al /path/to/file.rb/../../Gemfile, sonra her turda döngü ilk .. kaldırılacak, birlikte yol bileşeni önce. İlk /file.rb/.. kaldırılır, o zaman bir sonraki turda /to/.. uzaklaştırılır, /path/Gemfile.
Uzun lafın kısası, File.expand_path('../../Gemfile', __FILE__) yapmaktır yolu mevcut dosyaya göre bildiğin bir dosyanın mutlak yolunu almak için bir numara. Göreli yol .. ekstra __FILE__ dosya adı ortadan kaldırmaktır.

Nasıl bir boru ile kullanma "tee&...
Nasıl açık birden fazla dosya "Py...
Nasıl uzaktan değişiklikleri atmak ve ...
Düğme metni değiştirmek için nasıl <...
Nasıl "git" her değiştirilen...