--002215974862f6fdbd04af83c463
Content-Type: text/plain; charset=ISO-8859-1

On Mon, Oct 17, 2011 at 2:19 PM, Jon Crowell <impersonal / joncrowell.org>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:
>
> <internal:lib/rubygems/custom_require>:29:in `require': no such file
> to load -- lib/ear_gtd (LoadError)
>        from <internal:lib/rubygems/custom_require>:29:in `require'
>        from ./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.  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__)`

--002215974862f6fdbd04af83c463--