Ruby: __FILE__, __dir__ and symlinks

Updated . Posted . Visible to the public. Repeats.

Ruby's __FILE__ keyword returns the path to the current file. On popular for this are Ruby binaries:

#!/usr/bin/env ruby
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
require 'my_cli'
MyCli.run!

However, if you create a symlink to this file, this will no longer work. __FILE__ will resolve to the path of the symlink, not to its target.

One solution is to use File.realpath(__FILE__).

In Ruby 2+ you can also use this:

$LOAD_PATH << File.expand_path('../lib', __dir__)

__dir__ is simply a shortcut for File.dirname(File.realpath(__FILE__)).

Profile picture of Tobias Kraze
Tobias Kraze
Last edit
Felix Eschey
License
Source code in this card is licensed under the MIT License.
Posted by Tobias Kraze to makandra dev (2016-08-23 12:50)