Require behavior change from 1.8.7 p299 to 1.9.2 p0

requiring a file is causing problems for me in Ruby 1.9.2 p0. This
issue did not happen in Ruby 1.8.7 p299.

Here is a ruby file hello_world.rb

→ cat hello_world.rb

require ‘sinatra’

get ‘/’ do
“Hello world #{params[:name]}”.strip
end

In Ruby 1.8.7, I get into irb and type the following:

→ rvm use ruby-1.8.7-p299

info: Using ruby 1.8.7 p299

bruparel:~/temp/sin_test
→ irb
ruby-1.8.7-p299 > require ‘rubygems’
=> true
ruby-1.8.7-p299 > require ‘hello_world’
=> true

Now I switch to Ruby 1.9.2 as follows:

bruparel:~/temp/sin_test
→ rvm use ruby-1.9.2-p0

info: Using ruby 1.9.2 p0

bruparel:~/temp/sin_test
→ irb
ruby-1.9.2-p0 > require ‘rubygems’
=> true
ruby-1.9.2-p0 > require ‘hello_world’
LoadError: no such file to load – hello_world
from internal:lib/rubygems/custom_require:29:in require' from <internal:lib/rubygems/custom_require>:29:inrequire’
from (irb):2
from /home/bruparel/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `’

However, if I issue a slightly different require command at irb prompt
as shown below:

ruby-1.9.2-p0 > require ‘./hello_world’
=> true

Then it works!

But this is causing all the “old” Ruby 1.8.x programs to break. Is
there an environment setting in Ruby 1.9.2 that will restore the old
behavior?

Bharat

On Oct 16, 7:31 pm, Bharat R. [email protected] wrote:

requiring a file is causing problems for me in Ruby 1.9.2 p0. This
issue did not happen in Ruby 1.8.7 p299.

http://www.ruby-lang.org/en/news/2010/08/18/ruby-1-9-2-is-released/

“$: no longer includes the current directory.”

That means “.” is not included and thus you can’t require things in
the same folder (is a security measure)

from internal:lib/rubygems/custom_require:29:in `require’

But this is causing all the “old” Ruby 1.8.x programs to break. Is
there an environment setting in Ruby 1.9.2 that will restore the old
behavior?

severals:

ruby -I. my_script.rb

require_relative ‘hello_world’

or play with $: adding the current directory which I would recommend
not to.

Thanks Luis. I did some reading on Sinatra/rack-testing plus Ruby 1.9.2
upgrade. I was really trying to get tests to work in my Sinatra
application. I was successful in being able to run the tests. Here is
how:

I have a file called sharpener.rb in my project base directory. I
created a test directory and a file called test_shortener.rb in it.
Here is a snippet of require statements in it:

require ‘rubygems’
require ‘sinatra’
require ‘test/unit’
require ‘rack/test’

require File.join(Dir.pwd, ‘shortener’)

ENV[‘RACK_ENV’] = ‘test’

class TestShortener < Test::Unit::TestCase

end

Note that I am running the tests from the base directory as follows:

ruby test/test_shortener.rb

It works fine.

I am curious though. How is including the current directory in the path
a security risk?

Appreciate your time.

Bharat