加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 在gem中使用yaml文件

发布时间:2020-12-17 04:28:26 所属栏目:百科 来源:网络整理
导读:我正在研究我的第一个宝石(也是 ruby的新手),到目前为止整个代码都在这里; https://github.com/mikeyhogarth/tablecloth 我试图做的一件事是创建一个yaml文件,gem可以作为查找访问(在lib / tablecloth / yaml / qty.yaml下).这一切都很好,单元测试全部通过,
我正在研究我的第一个宝石(也是 ruby的新手),到目前为止整个代码都在这里;

https://github.com/mikeyhogarth/tablecloth

我试图做的一件事是创建一个yaml文件,gem可以作为查找访问(在lib / tablecloth / yaml / qty.yaml下).这一切都很好,单元测试全部通过,无论何时我构建并安装gem并尝试在irb(从我的主文件夹)下运行我得到;

Errno::ENOENT: No such file or directory - lib/tablecloth/yaml/qty.yaml

代码现在在?/ lib / tablecloth中查找文件…而不是在gem安装到的目录中.所以我的问题是;

1)我应该如何更改recipe.rb的第27行,使其查找安装了gem的文件夹?

2)我实际上是不正确地接近这整个事情(以这种方式在gems中使用静态yaml文件是否合适)?

解决方法

首先,您应该按以下方式引用文件:
file_path = File.join(File.dirname(__FILE__),"yaml/qty.yaml")
units_hash = YAML.load_file(filepath)

File.dirname(__ FILE__)为您提供当前文件(recipe.rb)所在的目录.
File.join以正确的方式连接文件路径.因此,您应该使用它来引用相对于recipe.rb文件夹的yaml文件.

如果在这种情况下使用YAML文件是一个好主意,那就是广泛讨论的内容.我,我自己认为,这是一种适当的方式,特别是在开发ruby时.

yaml文件的有效替代方法是rb-File(Ruby代码),您可以在其中声明包含数据的常量.稍后您可以直接使用它们.这样只有ruby-interpreter才能工作,你可以节省其他事情的计算时间. (不需要解析器)

但是在正常情况下,您还应该注意读取YAML文件可能会失败.所以你应该能够处理:

file_path = File.join(File.dirname(__FILE__),"yaml/qty.yaml")
begin
  units_hash = YAML.load_file(filepath)
rescue Psych::SyntaxError
  $stderr.puts "Invalid yaml-file found,at #{file_path}"
  exit 1
rescue Errno::EACCES
  $stderr.puts "Couldn't access file due to permissions at #{file_path}"
  exit 1
rescue Errno::ENOENT
  $stderr.puts "Couldn't access non-existent file #{file_path}"
  exit 1
end

或者,如果您不关心细节:

file_path = File.join(File.dirname(__FILE__),"yaml/qty.yaml")
units_hash =     
  begin
    YAML.load_file(filepath)
  rescue Psych::SyntaxError,Errno::EACCES,Errno::ENOENT
    {}
  end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读