9

私は、gem としてデプロイされる Ruby アプリケーションに取り組んでいます。gem に読み取り専用のデータ ファイルを含めたいのですが、どこにどのようにパッケージ化すればよいかわかりません。

少し背景を説明すると、このアプリケーションは数百の定数値を含む MIDI 仕様を扱います。たとえば、コントローラーの「Channel Volume」は常に値 7 で識別されます。「Sustain」は 64 で識別されます。などなど...これまで、人々はこれらの値を多数の定数セットとしてコードに含めてきました。それは問題ありませんが、yaml などの言語に依存しない形式でそれらを含める方が適切だと思われます。

GEM_PATH を使用して yaml ファイルを見つけるのは見苦しく、gem 以外のデプロイメントでライブラリを使用する場合も機能しません。

ご協力ありがとうございました

4

4 に答える 4

11

RubyGems は、このようなファイルをどこに保存すべきかについて何の主張もしていないと思います。私はそれを下に置き、lib/@mkrmrが言うようにします。File.expand_pathただし、入力が少なくなり、シンボリックリンクとファイルの移動に関するいくつかの問題が修正されるため、を使用します。YAML.load_file(File.expand_path('../../midi_codes.yml', __FILE__))

于 2011-05-25T23:05:24.653 に答える
7

このファイルを Gem のソース ツリー内のどこかに配置すると、相対パスを使用してロードできます。読みたい場所から、次のようにパスを定義できます。File.dirname(__FILE__) + "/here/is/my/file.txt"

シェルでディレクトリを上に移動するのと同じように、パス修飾子 .. を使用できます。

于 2011-05-25T19:22:03.277 に答える
6

これらのファイルには指定された場所があります。

  1. <gemdir>/dataあなたの宝石で呼ばれるフォルダを作成します
  2. メソッドを使用して、Gem.datadirこのディレクトリを見つけます。

これにより、公開されると予想されるディレクトリが作成されるようです。

このファイルを非公開にしたい場合は、File.dirname(__FILE__) + "/path"トリックを使用してそれを実現します。

于 2014-10-14T14:21:17.903 に答える
1

Rubygems パッケージ マネージャーの静的ファイルは、libディレクトリ内に配置されています。たとえば、証明書 ( *.pem) は に格納されlib/rubygems/ssl_certsます。それらは最も信頼できる情報源と見なすことができると思いますので、同じことをお勧めします.

于 2017-03-28T01:29:27.817 に答える