gpt4 book ai didi

ruby - 如何在 ruby​​ 代码中使用 erb 模板

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:34 26 4
gpt4 key购买 nike

我想使用ruby 的erb 模板功能。但是我无法运行提供的示例代码。

我发现 erb 已安装:

# file /usr/lib/ruby/1.9.1/erb.rb
/usr/lib/ruby/1.9.1/erb.rb: ASCII English text

它与 ruby​​ 一起安装:

# dpkg -S /usr/lib/ruby/1.9.1/erb.rb
libruby1.9.1: /usr/lib/ruby/1.9.1/erb.rb

我正在运行 /usr/lib/ruby/1.9.1/erb.rb

中提供的示例代码
#!/usr/bin/ruby
require 'erb'
x = 42
template = ERB.new <<-EOF
The value of x is: <%= x %>
EOF
puts template.result(binding)

运行代码时出现以下错误:

/workspace/ruby/erb.rb:4:in `<top (required)>': uninitialized constant ERB (NameError)
from /workspace/ruby/erb.rb:2:in `require'
from /workspace/ruby/erb.rb:2:in `<main>'

问题:上面的代码缺少什么?

这是我的平台:

# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.04.4 LTS
Release: 10.04
Codename: lucid

# uname -m
i686

和我的 ruby 版本:

# ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i486-linux]

回答:

@matt 的评论是对这个问题的回答。我将我的脚本命名为 erb.rb,这就是问题所在。我将它重命名为 testing_erb.rb 并且它起作用了。请查看 matt 的评论以获取更多详细信息。

最佳答案

您的测试文件名为 erb.rb。在 Ruby 1.9.1 中,当前目录位于加载路径上,因此当您调用 require 'erb' 时,它会尝试 require 自身。由于该文件未定义 ERB,您在尝试使用该常量时会遇到 uninitialized constant 错误。

尝试将您的文件重命名为类似erb_testing.rb 的名称,这样当您需要erb 时,不同文件之间就不会混淆。

请注意,在更高版本的 Ruby (1.9.2+) 中,当前目录不在默认加载路径中,因此您不会看到这样的问题。升级你的 Ruby 版本可能是值得的,因为 1.9.1 现在已经很旧了(2.1 应该很快发布,而 1.9.1 将落后四个版本)。看看RVM如果您的包管理器没有更新的版本。

需要注意的是,此错误取决于加载路径中条目的顺序。在我安装 1.9.1 时,当前目录是 last 条目,因此当需要 erb 时,首先看到并加载标准库中的版本,并且没有错误.看起来您的安装将当前目录放在标准库之前 - 我不知道为什么会这样。

关于ruby - 如何在 ruby​​ 代码中使用 erb 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19177815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com