机架错误 - LoadError:无法加载此类文件

时间:2011-10-09 10:50:46

标签: ruby-on-rails ruby rack

尝试通过tekpub机架教程但遇到此错误。

Boot Error

Something went wrong while loading app.ru

LoadError: cannot load such file -- haiku

在我尝试运行的应用程序所在的目录中有一个名为haiku.rb的文件但是在尝试运行程序时出现上述错误。这是代码:

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

我确定这是一个小错误,因为代码与教程中的相同,并且对他有用......

由于

1 个答案:

答案 0 :(得分:21)

您需要阅读ruby加载路径($LOAD_PATH$:)。默认情况下,ruby有一个加载路径,其中包含安装宝石的地方,这就是为什么你可以{@ 1}}而不提供haml gem所在位置的完整路径。

当你输入require 'haml'时,你基本上是告诉ruby在它的加载路径中找到一个名为require 'haiku'的文件,haiku.rb来自ruby找不到你的LoadError 1}}文件在haiku.rb(或$LOAD_PATH中列出的任何目录中,这只是$:的简写。)

你可以用(至少)两种方式解决这个问题:

  1. $LOAD_PATH更改为require 'haiku'以明确告知ruby要加载的文件

  2. 将当前工作目录添加到加载路径:require File.dirname(__FILE__) + '/haiku.rb'。这样您就可以保留$:.push(File.dirname(__FILE__))部分。