我正在开发一个部署为gem的Ruby应用程序。我想在gem中包含一个只读数据文件,我不确定应该如何/在哪里打包
对于一些小背景,此应用程序处理包含数百个常量值的MIDI规范。例如,控制器“通道音量”始终由值7标识。“维持”由64等标识等...过去,人们已将这些值作为一组大量的常量包含在其代码中。这很好,但似乎更适合用语言无关的格式包括yaml
使用GEM_PATH定位yaml文件很难看,在非gem部署中使用库时也无法使用。
感谢您的帮助
答案 0 :(得分:11)
我不认为RubyGems会对你应该存储这样的文件做出任何断言。我会把它放在lib/
之下,就像@mkrmr说的那样。不过,我会使用File.expand_path
,因为它更少输入并修复了符号链接和移动文件的偶然问题:YAML.load_file(File.expand_path('../../midi_codes.yml', __FILE__))
答案 1 :(得分:7)
如果将此文件放在Gem源树中的某个位置,则可以使用相对路径加载它。从您想要阅读的位置,您可以像这样定义路径:File.dirname(__FILE__) + "/here/is/my/file.txt"
您可以使用路径修饰符..就像在shell上一样上一个目录。
答案 2 :(得分:6)
这些文件有指定的位置。
<gemdir>/data
的文件夹Gem.datadir
方法找到此目录。这似乎创建了一个预期公开的目录。
如果您希望此文件是私有的,那么使用File.dirname(__FILE__) + "/path"
技巧将实现这一目标。
答案 3 :(得分:0)
Rubygems包管理器将其静态文件放在lib
目录中。例如,证书(*.pem
)存储在lib/rubygems/ssl_certs
中。我相信它们可以被认为是最权威的来源,因此我建议你也这样做。