Ruby on rails 机架错误--LoadError:无法加载此类文件
试图浏览tekpub rack教程,但遇到此错误Ruby on rails 机架错误--LoadError:无法加载此类文件,ruby-on-rails,ruby,rack,Ruby On Rails,Ruby,Rack,试图浏览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
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
类环境输出
def初始化(应用=无)
@app=app
结束
def呼叫(环境)
out=“”
除非(@app.nil?)
响应=@app.call(env)[2]
输出+=响应
结束
env.keys.each{key | out+=”{key}={env[key]} “}
[“200”,{“Content Type”=>“text/html”}[out]]
结束
结束
需要“haml”
需要“俳句”
类MyApp
def呼叫(环境)
诗=俳句。新的。随机的
template=File.open(“views/index.haml”).read
engine=Haml::engine.new(模板)
out=engine.render(Object.new,:poem=>poem)
[“200”,{“内容类型”=>“文本/html”},输出]
结束
结束
使用环境输出
运行MyApp.new
我相信这是一个小错误,因为代码与教程中的代码相同,并且对他有效
谢谢您需要阅读ruby加载路径(或者
$load\u path
或者$:
)。默认情况下,ruby有一个加载路径,其中包括安装gem的位置,这就是为什么您可以执行require'haml'
,而不提供haml gem所在位置的完整路径
当您键入require'haiku'
时,您基本上是在告诉ruby在其加载路径的某个地方查找名为haiku.rb
的文件,而加载错误来自ruby在$load\u path
中列出的任何目录中都找不到您的haiku.rb
文件(或$:
,它只是$LOAD\u PATH
的缩写)
您可以通过(至少)两种方法之一解决此问题:
将require'haiku'
更改为require File.dirname(\uu File\uuu)+'/haiku.rb'
,以明确告诉ruby要加载的文件
将当前工作目录添加到加载路径:$:.push(File.dirname(\uuuu File\uuuu))
。这样,您就可以保留需要“俳句”的部分
如果您在ruby 1.9上运行,您可能希望尝试require./haiku.rb'
,或者将当前目录附加到加载路径($:.append(File.dirname(\uuu File\uuu))
)然后做'require'俳句'。谢谢你修复了它。我应该去哪里寻找信息。Rack文档或Ruby文档?刚刚把我的评论改写为一个正确的答案。它更具描述性。如果你运行Ruby 1.9,你还可以查看require\u relative
。我不认为。append
是一种方法$LOAD_PATH数组中的d。#2中的代码段应该是$:.push
还是我搞错了?您完全正确。它应该是$:.push
或$:作为$:.push
部分的旁注,这将把当前目录附加到加载路径的末尾。为了将当前目录添加到加载路径的前面,useunshift
而不是push