机架错误 – LoadError:无法加载此类文件
试图通过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+="#{key}=#{env[key]} "} ["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
或$:
$LOAD_PATH
。 默认情况下,ruby有一个加载路径,其中包含安装gem的任何位置,这就是为什么你可以在不提供haml gem所在位置的完整路径require 'haml'
情况下require 'haml'
。
当你输入haiku.rb
require 'haiku'
,你基本上是告诉ruby在它的加载路径中找到一个haiku.rb
文件,而LoadError
来自ruby没有在$LOAD_PATH
列出的任何目录中找到你的haiku.rb
文件$LOAD_PATH
(或$:
$LOAD_PATH
这只是$LOAD_PATH
简写)。
你可以用(至少)两种方式解决这个问题:
-
更改
require 'haiku'
require File.dirname(__FILE__) + '/haiku.rb'
明确告诉ruby要加载哪个文件 -
将当前工作目录添加到加载路径:
$:.push(File.dirname(__FILE__))
。 这样你就可以保持require 'haiku'
部分。