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>w=
rote:
>
>> Hi. =A0I downloaded a tiny ruby app called EarGTD and I am trying to get
>> it to run at the command line. =A0It 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-app=
s-with-ruby-and-activerecord.html
>>
>> When I download and unzip the file, I get the following directory
>> structure:
>>
>> EarGTD/
>> =A0 =A0.DS_Store
>> =A0 =A0Rakefile
>> =A0 =A0data/
>> =A0 =A0 =A0 =A0test_ear_gtd.db
>> =A0 =A0earGTD*
>> =A0 =A0lib/
>> =A0 =A0 =A0 =A0ear_gtd.rb
>> =A0 =A0test/
>> =A0 =A0 =A0 =A0test_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:
>>
>> <internal:lib/rubygems/custom_require>:29:in `require': no such file
>> to load -- lib/ear_gtd (LoadError)
>> =A0 =A0 =A0 =A0from <internal:lib/rubygems/custom_require>:29:in `requir=
e'
>> =A0 =A0 =A0 =A0from ./earGTD:2:in `<main>'
>>
>> I understand that the earGTD is trying to load lib/ear_gtd.rb - which
>> is in the lib file in the same directory. =A0But for some reason the
>> ruby path loading system doesn't know how to find it. =A0I 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 calle=
d
> $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 i=
n
> 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 t=
he
> 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__)`
>