用Ruby gem打包只读数据文件

问题描述

| 我正在开发作为gem部署的Ruby应用程序。我想在gem中包含一个只读数据文件,但不确定如何打包/打包在何处 对于一些背景知识,此应用程序处理的MIDI规范包括数百个常量值。例如,控制器\“ Channel Volume \”始终由值7标识。\“ Sustain \”由64标识。等等...过去,人们将这些值作为一大组常量包含在其值中。码。没关系,但对我来说似乎更适合包含与语言无关的格式,例如yaml 使用GEM_PATH定位yaml文件很丑陋,而且在非gem部署中使用库时也无法使用。 谢谢您的帮助     

解决方法

我认为RubyGems不会对应在何处存储这样的文件做出任何断言。我会把它放在
lib/
以下,就像@mkrmr所说的那样。不过,我会使用
File.expand_path
,因为它的键入较少,并且修复了符号链接和移动文件的一些偶尔出现的问题:
YAML.load_file(File.expand_path(\'../../midi_codes.yml\',__FILE__))
    ,如果将此文件放置在Gem的源代码树中的某个位置,则可以使用相对路径来加载它。您可以从想要阅读的地方定义路径,如下所示:
File.dirname(__FILE__) + \"/here/is/my/file.txt\"
您可以像在外壳上一样使用路径修饰符..进入目录。     ,这些文件有指定的位置。 在gem中创建一个名为
<gemdir>/data
的文件夹 使用
Gem.datadir
方法找到此目录。 这似乎创建了一个预期是公共的目录。 如果您想将此文件设为私有,则使用
File.dirname(__FILE__) + \"/path\"
技巧即可完成。     ,Rubygems软件包管理器的静态文件位于
lib
目录中。例如,证书(
*.pem
)存储在
lib/rubygems/ssl_certs
中。我相信它们可以被认为是最权威的资料,因此我建议您也这样做。