Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rack Error -- LoadError: cannot load such file

Trying to go through the tekpub rack tutorial but run into this error.

Boot Error

Something went wrong while loading app.ru

LoadError: cannot load such file -- haiku

There is a file named haiku.rb in the same directory as the app I am trying to run but I get the above error while trying to run the program. Here is the code:

class EnvironmentOutput


  def initialize(app=nil)
    @app = app
  end


  def call(env)
    out = ""

    unless(@app.nil?)
 response = @app.call(env)[2]
 out+=response
end

env.keys.each {|key| out+="<li>#{key}=#{env[key]}</li>"}
["200",{"Content-Type" => "text/html"},[out]]
  end
end

require 'haml'
require 'haiku'

class MyApp
  def call(env)

  poem = Haiku.new.random
  template = File.open("views/index.haml").read
  engine = Haml::Engine.new(template)
  out = engine.render(Object.new, :poem => poem)

   ["200",{"Content-Type" => "text/html"}, out]
  end
end

use EnvironmentOutput
run MyApp.new

I'm sure its a small error as the code is the same as in the tutorial and it works for him...

Thanks

like image 667
AFraser Avatar asked Oct 09 '11 10:10

AFraser


1 Answers

You'll want to read up on ruby load path (either $LOAD_PATH or $:). By default, ruby has a load path which includes wherever your gems are installed, which is why you can do require 'haml' without providing the full path to where your haml gem is located.

When you type require 'haiku', you're basically telling ruby to look for some file called haiku.rb somewhere in it's load path, and the LoadError comes from ruby not finding your haiku.rb file in any of the directories listed in $LOAD_PATH (or $:, which is just shorthand for $LOAD_PATH).

You can solve this in one of (at least) two ways:

  1. change require 'haiku' to require File.dirname(__FILE__) + '/haiku.rb' to explicitly tell ruby what file to load

  2. add the current working directory to your load path: $:.push(File.dirname(__FILE__)). This way you can keep the require 'haiku' part.

like image 191
Frost Avatar answered Sep 28 '22 06:09

Frost