Techioz Blog

プロジェクトディレクトリへの相対パス

概要

私の Ruby プロジェクトでは、いくつかのリモート ボックス上でファイルを移動したり編集したりするなど、めちゃくちゃなことを使用しているので、ルート プロジェクト ディレクトリへの相対パスのようなものが本当に必要です。多くのメソッドで使用される処理フォルダーが多数あります。

現在、パスをハードコーディングしていますが、それは私を不幸にします。

解決策

これでカレントディレクトリ(現在のファイルのディレクトリ)を取得できます

File.dirname(__FILE__)

その後、ルートへの相対パスを使用して結合できます

File.join(File.dirname(__FILE__), '../../') # add proper number of ..

または、expand_path を使用して相対パスを絶対パスに変換することもできます。

ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', File.dirname(__FILE__))

または、2 つのディレクトリ間の相対パスを計算することもできます。

require 'pathname'
puts Pathname.new('/').relative_path_from(Pathname.new('/some/child/dir/')).to_s
# => ../../..