How does one get an absolute absolute file path?

J

James Byrne

I have a situation where I call a ruby script from a directory that is a
logical link to the actual one. So for instance the actual path is:

/home/me/projects/bin/script.rb

But the path used to call the script is

/home/me/projects/tmp/testing/bin/script.rb

where tmp/testing/bin is a logical link to projects/bin.

With Ruby-1.8.7 using a simple require in the script, like this, works
fine:

require File.dirname(__FILE__) + "../lib/library"

However, this no longer works in 1.9.2 because of the decision, asinine
in my opinion, to remove . from the default load path. So, what I am
trying to discover is how best to provide an absolute path which gives
the same result. The problem is that when I build such a path using
File.expand_path I end up with this:

/home/me/projects/tmp/testing/lib/library

which fails because there is no /home/me/projects/tmp/testing/lib
directory.

My question is: Is there any way to obtain the absolute path for
__FILE__ such that it returns the path to its actual location and not
one that includes any logical links?
 
R

Robert Dober

I have a situation where I call a ruby script from a directory that is a
logical link to the actual one. =A0So for instance the actual path is:

/home/me/projects/bin/script.rb

But the path used to call the script is

/home/me/projects/tmp/testing/bin/script.rb

where tmp/testing/bin is a logical link to projects/bin.

With Ruby-1.8.7 using a simple require in the script, like this, works
fine:

require File.dirname(__FILE__) + "../lib/library"

However, this no longer works in 1.9.2 because of the decision, asinine
in my opinion, to remove . from the default load path. =A0So, what I am
trying to discover is how best to provide an absolute path which gives
the same result. =A0The problem is that when I build such a path using
File.expand_path I end up with this:

/home/me/projects/tmp/testing/lib/library

which fails because there is no /home/me/projects/tmp/testing/lib
directory.

My question is: Is there any way to obtain the absolute path for
__FILE__ such that it returns the path to its actual location and not
one that includes any logical links?

File.expand_path( File.dirname( __FILE__ ))
normally does the trick for me.

HTH
R.


--=20
The best way to predict the future is to invent it.
-- Alan Kay
 
J

James Byrne

Robert said:
File.expand_path( File.dirname( __FILE__ ))
normally does the trick for me.

HTH
R.

This construction returns the logical link as part of the path. I want
the actual file system path to the script ignoring the logical link.
 
J

James Byrne

Glenn said:
By "logical link" I assume you mean symbolic link -- I've never heard of
a logical link.

You are correct, I was writing of symbolic links.
You want the pathname package:

require 'pathname'
path = Pathname.new(__FILE__)
p path.realpath

Thank you. This seems to provide the answer that I sought.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,733
Messages
2,569,439
Members
44,829
Latest member
PIXThurman

Latest Threads

Top