尝试阅读tekpub Rack 教程,但遇到此错误。

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

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

谢谢

最佳答案

您需要阅读ruby加载路径($LOAD_PATH$:)。默认情况下,ruby的加载路径包括安装 gem 的位置,这就是为什么您可以在不提供haml gem 所在位置的完整路径的情况下执行require 'haml'的原因。

当您键入require 'haiku'时,您基本上是在告诉ruby在其加载路径中的某个位置查找某个名为haiku.rb的文件,并且LoadError来自ruby,它不在haiku.rb(或$LOAD_PATH)列出的任何目录中找到您的$:文件。 $LOAD_PATH的简写)。

您可以通过(至少)两种方式之一来解决此问题:

  • require 'haiku'更改为require File.dirname(__FILE__) + '/haiku.rb',以明确告诉ruby加载哪个文件
  • 将当前工作目录添加到您的加载路径:$:.push(File.dirname(__FILE__))。这样,您可以保留require 'haiku'部分。
  • 10-08 04:50