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 <josh.cheek / gmail.com> wrote: > On Mon, Oct 17, 2011 at 2:19 PM, Jon Crowell <impersonal / joncrowell.org>wrote: > >> Hi. ¨Â äï÷îìïáäåä ôéîù òõâù áðãáììåä ÅáòÇÔÄ áîáí ôòùéîç ôï çå>> it to run at the command line. ¨Âéó óéíðìå ðòïçòáãïîóéóôéîç ïæ >> 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 >> ¨Âáëåæéì>> ¨Âáôᯠ>> ¨Âåóôßåáòßçôä®äâ >> ¨ÂáòÇÔĪ >> ¨Âéâ>> ¨Âáòßçôä®ò>> ¨Âåóô¯ >> ¨Âåóôßåáòßçôä®òâ >> >> >> 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: >> >> <internal:lib/rubygems/custom_require>:29:in `require': no such file >> to load -- lib/ear_gtd (LoadError) >> ¨Âòï¼éîôåòîáìºìéâ¯òõâùçåíó¯ãõóôïíßòåñõéò徺²¹ºéî àòåñõéòå>> ¨ÂòﮯåáòÇÔĺ²ºéà¼íáéî¾§ >> >> I understand that the earGTD is trying to load lib/ear_gtd.rb - which >> is in the lib file in the same directory. ¨Âõô æïóïíå òåáóïî ôè>> ruby path loading system doesn't know how to find it. ¨Â èáöå íïäéæéåä >> /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 apps > 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__)` >