I have this bit of code in the beginning of an application I’m writing
(in main.rb):
require ‘pathname’
p = Pathname.new($0)
if p.basename.to_s == ‘main.rb’
Dir.chdir p.parent.to_s
end
require ‘gui/main_window’
… # (rest of requires, application itself)
The check whether it’s “main.rb” or not is so this doesn’t happen for
Rake. Now, it works well, but it’s ugly. The reason I don’t just go
ahead and use ‘:’ is that I use glade, as well as some other files which
I need to be able to find. This is currently in development, so I’d
prefer to avoid forcing people to install the program in predetermined
locations (/usr/local/bin, /usr/local/share/my_app_files, et cetera).
The check whether it’s “main.rb” or not is so this doesn’t happen for
Rake. Now, it works well, but it’s ugly. The reason I don’t just go
ahead and use ‘:’ is that I use glade, as well as some other files which
I need to be able to find. This is currently in development, so I’d
prefer to avoid forcing people to install the program in predetermined
locations (/usr/local/bin, /usr/local/share/my_app_files, et cetera).
Have your startup script/s determine the “root” of your application’s
directory structure, and use a global to refer to all other resources
using absolute paths from this root path? (Yes, I know globals are evil,
but the current working directory is global state too, so it’s at least
not a worse solution.)
Depending on being chdirred into your directory structure or on
predetermined install locations is Bad, smells too much of “I know
what’s good for my users better than them” to me.
David V.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.