开发者

Rack Error -- LoadError: cannot load such file

开发者 https://www.devze.com 2023-04-11 14:05 出处:网络
Trying to go through the tekpub rack tutorial but run into this error. Boot Error Something went wrong while loading app.ru

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:

  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.

0

精彩评论

暂无评论...
验证码 换一张
取 消