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
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:
change
require 'haiku'
torequire File.dirname(__FILE__) + '/haiku.rb'
to explicitly tell ruby what file to loadadd the current working directory to your load path:
$:.push(File.dirname(__FILE__))
. This way you can keep therequire 'haiku'
part.
精彩评论