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__)`
>