What does __FILE__ mean in Ruby?


What does __FILE__ mean in Ruby?



I see this all the time in Ruby:

require File.dirname(__FILE__) + "/../../config/environment"   

What does __FILE__ mean?




When to use 'self' in Ruby

1:



How can I create a hidden button in Shoes?
It is a reference to the current file name.


File uploads using the selenium-client gem
In the file foo.rb, __FILE__ would be interpreted as "foo.rb"..
Bash in Emacs + OSX not finding gems installed via terminal.app?
Edit: Ruby 1.9.2 and 1.9.3 appear to behave a little differently from what Luke Bayes said in his comment.


Test Rake Tasks
With these files:.
Help Meta-programming in Ruby: Overwriting Activerecord Setters
# test.rb puts __FILE__ require './dir2/test.rb' 
# dir2/test.rb puts __FILE__ 
Running ruby test.rb will output.
p vs puts in Ruby
test.rb /full/path/to/dir2/test.rb 


Unable to catch an exception in Ruby

2:


The value of __FILE__ is a relative path that is created and stored (but never updated) when your file is loaded.

This means that if you have any calls to Dir.chdir anywhere else in your application, this path will expand incorrectly..
puts __FILE__ Dir.chdir '../../' puts __FILE__ 
One workaround to this problem is to store the expanded value of __FILE__ outside of any application code.

As long as your require statements are at the top of your definitions (or at least before any calls to Dir.chdir), this value will continue to be useful after changing directories..
$MY_FILE_PATH = File.expand_path(File.dirname(__FILE__))  # open class and do some stuff that changes directory  puts $MY_FILE_PATH 


3:


__FILE__ is the filename with extension of the file containing the code being executed.. In foo.rb, __FILE__ would be "foo.rb".. If foo.rb were in the dir /home/josh then File.dirname(__FILE__) would return /home/josh..


4:


In Ruby, the Windows version anyways, I just checked and __FILE__ does not contain the full path to the file.

Instead it contains the path to the file relative to where it's being executed from.

. In PHP __FILE__ is the full path (which in my opinion is preferable).

This is why, in order to make your paths portable in Ruby, you really need to use this:.
File.expand_path(File.dirname(__FILE__) + "relative/path/to/file") 
I should note that in Ruby 1.9.1 __FILE__ contains the full path to the file, the above description was for when I used Ruby 1.8.7.. In order to be compatible with both Ruby 1.8.7 and 1.9.1 (not sure about 1.9) you should require files by using the construct I showed above..



85 out of 100 based on 85 user ratings 385 reviews