Hi!
I’ve written a library (for the sake of this email, let’s call it
Mylib). The directory structure for it is like this:
lib/
|- mylib/
| |- bar.rb
| - foo.rb
|
- mylib.rb
Now, in the applications, I do “require ‘lib/mylib.rb’” or similar. Then
mylib.rb does “require ‘mylib/foo.rb’” and “require ‘mylib/bar.rb’”.
This works fine when I use the FILE-idiom (to check if you run
mylib.rb directly), but from another file, this fails. (Because it looks
for mylib/foo.rb relative to the cwd of the application requiring
mylib.rb, which is wrong)
What’s the best approach to solve this?
I could either change $LOAD_PATH in the library, adding
File.dirname(FILE) to it, or using File.dirname(FILE) as a part
of every includepath. (require File.dirname(FILE) + ‘…’)
Other suggestions also welcome. 
“Jørgen P. Tjernø” wrote:
Hi!
I’ve written a library (for the sake of this email, let’s call it
Mylib). The directory structure for it is like this:
lib/
|- mylib/
| |- bar.rb
| - foo.rb
|
- mylib.rb
Now, in the applications, I do “require ‘lib/mylib.rb’” or similar. Then
mylib.rb does “require ‘mylib/foo.rb’” and “require ‘mylib/bar.rb’”.
This works fine when I use the FILE-idiom (to check if you run
mylib.rb directly), but from another file, this fails. (Because it looks
for mylib/foo.rb relative to the cwd of the application requiring
mylib.rb, which is wrong)
What’s the best approach to solve this?
I could either change $LOAD_PATH in the library, adding
File.dirname(FILE) to it, or using File.dirname(FILE) as a part
of every includepath. (require File.dirname(FILE) + ‘…’)
Other suggestions also welcome. 
I use the same directory structure in my projects. During testing, I
just add a -Ilib option to the ruby command. That allows me to “require
‘mylib’” from client code, and mylib will just do “require ‘mylib/bar’”.
It avoids all the FILE hackery.
Of course, if you don’t want to type -Ilib all the time, use Rake to
setup your unit tests. The default test task in Rake will handle this
fine.
When you deploy your application, just deploy to to a directory that is
included in the standard ruby search path. Generally this is somewhere
in the sitedir directory.
– Jim W.
I also use the -I' option when I need to test scripts. As Jim said, when you deploy your application, make it install into a directory that Ruby will automatically search. A good way to deploy applications is to use
setup.rb’ (just Google for it) or build a gem.