机架错误 - LoadError:无法加载此类文件
Posted
技术标签:
【中文标题】机架错误 - LoadError:无法加载此类文件【英文标题】:Rack Error -- LoadError: cannot load such file 【发布时间】: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 文档?
刚刚将我的评论改写为正确答案。它更具描述性。
【参考方案1】:
您需要阅读 ruby 加载路径($LOAD_PATH
或 $:
)。默认情况下,ruby 有一个加载路径,其中包括 gem 的安装位置,这就是为什么你可以在不提供 haml gem 所在位置的完整路径的情况下执行require 'haml'
。
当您输入require 'haiku'
时,您基本上是在告诉 ruby 在其加载路径中的某处查找一些名为 haiku.rb
的文件,而 LoadError
来自 ruby 在任何在$LOAD_PATH
(或$:
,这只是$LOAD_PATH
的简写)中列出的目录。
您可以通过(至少)两种方式之一解决此问题:
将 require 'haiku'
更改为 require File.dirname(__FILE__) + '/haiku.rb'
以明确告诉 ruby 加载什么文件
将当前工作目录添加到您的加载路径:$:.push(File.dirname(__FILE__))
。这样您就可以保留require 'haiku'
部分。
【讨论】:
如果您正在运行 ruby 1.9,您还可以查看require_relative
。
我不认为 .append
是 $LOAD_PATH 数组上的方法。 #2 中的代码 sn-p 应该是 $:.push
还是我有什么问题?
你是完全正确的。它应该是$:.push
或$: <<
。我会更新我的答案。
作为$:.push
部分的旁注,这会将当前目录附加到加载路径的末尾。为了将其添加到加载路径,请使用 unshift
而不是 push
以上是关于机架错误 - LoadError:无法加载此类文件的主要内容,如果未能解决你的问题,请参考以下文章
LoadError: 无法加载此类文件 -- test/unit/error
rails 无法加载此类文件 -- rake (LoadError)
安装 ruby-2.1.2:无法加载此类文件 -- openssl (LoadError)
错误“...无法加载此类文件 -- mysql2/2.0/mysql2 (LoadError)”。在带有 Ruby 2.0.0 的 Windows XP 上