【问题标题】:Rack Error -- LoadError: cannot load such file机架错误 - LoadError:无法加载此类文件
【发布时间】:2011-12-03 22:00:06
【问题描述】:

尝试浏览 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​​ 1.9 上运行,您可能想尝试require './haiku.rb',或者将当前目录附加到您的加载路径 ($:.append(File.dirname(__FILE__))),然后执行 `require 'haiku'。
  • 感谢您修复它。我会在哪里尝试找到该信息。机架文档还是 Ruby 文档?
  • 刚刚将我的评论改写为正确答案。它更具描述性。

标签: ruby-on-rails ruby rack


【解决方案1】:

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

当您输入require 'haiku' 时,您基本上是在告诉 ruby​​ 在其加载路径中的某处查找一些名为 haiku.rb 的文件,而 LoadError 来自 ruby​​ 在任何在$LOAD_PATH(或$:,这只是$LOAD_PATH 的简写)中列出的目录。

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

  1. require 'haiku' 更改为 require File.dirname(__FILE__) + '/haiku.rb' 以明确告诉 ruby​​ 加载什么文件

  2. 将当前工作目录添加到您的加载路径:$:.push(File.dirname(__FILE__))。这样您就可以保留require 'haiku' 部分。

【讨论】:

  • 如果您正在运行 ruby​​ 1.9,您还可以查看 require_relative
  • 我不认为 .append 是 $LOAD_PATH 数组上的方法。 #2 中的代码 sn-p 应该是 $:.push 还是我有什么问题?
  • 你是完全正确的。它应该是$:.push$: &lt;&lt;。我会更新我的答案。
  • 作为$:.push 部分的旁注,这会将当前目录附加到加载路径的末尾。为了将其添加到加载路径,请使用 unshift 而不是 push
猜你喜欢
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 2015-01-22
相关资源
最近更新 更多