Ich arbeite an einer Ruby-Anwendung, die als Schmuckstück bereitgestellt wird. Ich möchte eine schreibgeschützte Datei mit dem Juwel einschließen und bin mir nicht sicher, wie / wo das verpackt werden sollte
Für einen kleinen Hintergrund behandelt diese Anwendung die MIDI-Spezifikation, die Hunderte von konstanten Werten enthält. Zum Beispiel wird Controller "Channel Volume" immer durch den Wert 7 identifiziert. "Sustain" wird durch 64 identifiziert. Etc etc ... In der Vergangenheit haben Leute diese Werte als eine große Menge von Konstanten in ihren Code aufgenommen. Das ist in Ordnung, aber es erscheint mir angemessener, diese in ein sprachunabhängiges Format wie yaml einzubinden.
Die Verwendung von GEM_PATH zum Auffinden der YAML-Datei ist hässlich und würde auch nicht funktionieren, wenn die Bibliothek in einer Nicht-GEM-Bereitstellung verwendet wird.
Danke für Ihre Hilfe
Ich glaube nicht, dass RubyGems Behauptungen darüber aufstellt, wo solche Dateien gespeichert werden sollten. Ich würde es unter lib/
setzen und wie @mkrmr sagt. Ich würde jedoch File.expand_path
verwenden, weil es weniger tippt und einige gelegentliche Probleme mit symbolischen Links und beweglichen Dateien behebt: YAML.load_file(File.expand_path('../../midi_codes.yml', __FILE__))
Wenn Sie diese Datei irgendwo im Quellbaum Ihres Gems platzieren, können Sie einen relativen Pfad verwenden, um sie zu laden. Von wo Sie es lesen möchten, können Sie den Pfad wie folgt definieren: File.dirname(__FILE__) + "/here/is/my/file.txt"
Sie können den Pfadmodifikator verwenden. Wie bei der Shell, um nach einem Verzeichnis zu suchen.
Es gibt einen bestimmten Speicherort für diese Dateien.
<gemdir>/data
in Ihrem Juwel Gem.datadir
-Methode, um dieses Verzeichnis zu finden. Dies scheint ein Verzeichnis zu erstellen, das öffentlich sein soll.
Wenn Sie möchten, dass diese Datei privat ist, dann wird das mit dem File.dirname(__FILE__) + "/path"
Trick erledigt.
Der Rubygems-Paketmanager hat seine statischen Dateien im Verzeichnis lib
abgelegt. Beispielsweise werden Zertifikate ( *.pem
) in lib/rubygems/ssl_certs
gespeichert. Ich glaube, dass sie als die maßgebendste Quelle angesehen werden können, daher empfehle ich Ihnen, dasselbe zu tun.