From: Jon Crowell Date: 2011-10-18T04:54:20+09:00 Subject: Re: noobie question - how do I run this command-line program? Wow, thanks. That was a perfect explanation for the behavior I witnessed. The solution that you proposed works. Now my problem is that the second line of lib/ear_gtd.rb, which ruby can now find, which reads: require "active_record" is causing ruby to throw up its hands. I guess this is where I need to use and understand Bundler for dependency management, is that right? Thanks, Jon On Mon, Oct 17, 2011 at 3:39 PM, Josh Cheek wrote: > On Mon, Oct 17, 2011 at 2:19 PM, Jon Crowell wrote: > >> Hi.  I downloaded a tiny ruby app called EarGTD and I am trying to get >> it to run at the command line.  It is a simple program consisting of >> about four files. You can read about it here: >> >> http://oreilly.com/pub/a/ruby/2007/06/21/how-to-build-simple-console-apps-with-ruby-and-activerecord.html >> >> When I download and unzip the file, I get the following directory >> structure: >> >> EarGTD/ >>    .DS_Store >>    Rakefile >>    data/ >>        test_ear_gtd.db >>    earGTD* >>    lib/ >>        ear_gtd.rb >>    test/ >>        test_ear_gtd.rb >> >> >> The entire contents of the earGTD file, which is the file which >> launches the app, are as follows: >> >> #!/usr/bin/env ruby >> require "lib/ear_gtd" >> EarGTD.connect >> EarGTD.process_command(ARGV) >> >> >> The problem I am having is that when I launch the app, I get the >> following error: >> >> :29:in `require': no such file >> to load -- lib/ear_gtd (LoadError) >>        from :29:in `require' >>        from ./earGTD:2:in `
' >> >> I understand that the earGTD is trying to load lib/ear_gtd.rb - which >> is in the lib file in the same directory.  But for some reason the >> ruby path loading system doesn't know how to find it.  I have modified >> /etc/bashrc to put my current directory in the $PATH, but that didn't >> make a difference. >> >> If you can tell me what is going on, I would much appreciate it. >> >> Thanks, >> >> Jon >> >> > Ruby programs look for files that are required in a global variable called > $LOAD_PATH. In old Ruby, the directory you are in when you invoke the app is > added to the $LOAD_PATH. If you were sitting in the directory as earGTD in > old Ruby, it would then be able to find 'lib/ear_gtd" when it requires it, > because that is where the file is, relative to where you are in your > directory. > > This was deemed a security risk, because it meant you could accidentally run > code without intending to. So now you must either pass the full path to the > file you are requiring, or you must alter the load path to include a dir > that you can require files relatively to. > > The easiest solution for this particular use case is to just require the > full path. Change `require "lib/ear_gtd"` to `require > File.expand_path('../lib/ear_gtd', __FILE__)` >