Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 机架错误--LoadError:无法加载此类文件_Ruby On Rails_Ruby_Rack - Fatal编程技术网

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

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

试图浏览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
类环境输出
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
    部分的旁注,这将把当前目录附加到加载路径的末尾。为了将当前目录添加到加载路径的前面,use
    unshift
    而不是
    push