尝试阅读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'
部分。