问题描述
|
我正在开发作为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
中。我相信它们可以被认为是最权威的资料,因此我建议您也这样做。