使用Ruby gem打包只读数据文件

Ari*_*sso 9 ruby rubygems constants jyaml

我正在开发一个部署为gem的Ruby应用程序.我想在gem中包含一个只读数据文件,并且不确定应该如何/在哪里打包

对于一些小背景,这个应用程序处理MIDI规范,其中包括数百个常量值.例如,控制器"通道音量"总是由值7标识."维持"由64等标识等...过去,人们已经将这些值作为一组大量的常量包含在其代码中.这很好,但似乎更适合用语言无关的格式包括yaml

使用GEM_PATH定位yaml文件很难看,并且在非gem部署中使用库时也不起作用.

谢谢您的帮助

Ian*_*Ian 11

我不认为RubyGems会对你应该存储这样的文件做出任何断言.我会把它放在下面lib/并像@mkrmr那样说.File.expand_path不过,我会使用它,因为它减少了键入并修复了符号链接和移动文件的偶然问题:YAML.load_file(File.expand_path('../../midi_codes.yml', __FILE__))


小智 7

如果将此文件放在Gem源树中的某个位置,则可以使用相对路径加载它.从您想要阅读的位置,您可以像这样定义路径:File.dirname(__FILE__) + "/here/is/my/file.txt"

您可以使用路径修改器...就像在shell上一样上一个目录.


Mic*_*hop 6

这些文件有指定的位置.

  1. 创建一个<gemdir>/data在gem中调用的文件夹
  2. 使用该Gem.datadir方法找到此目录.

这似乎创建了一个预期公开的目录.

如果您希望此文件是私有的,那么使用该File.dirname(__FILE__) + "/path"技巧将实现这一目标.