0

このガイドに従って、Bundler で gem を作成しようとしています: http://rakeroutes.com/blog/lets-write-a-gem-part-one/。その中で、次のように述べています。

gemspec を初めて見たとき、gem を開発するときにさらに require ステートメントを追加する必要があると誤って考えました。そうではありません。ファイルは git にある必要があるだけです。

この規則を使用するために古い gem のいくつかをクリーンアップしようとしていますが、gem をインストールすると、他のファイルのクラスが利用できません。/lib ディレクトリの下にネストされたディレクトリがいくつかありますが、それが問題になるとは思いません。他のファイルが必要になるのを妨げるような見落としやすいものはありますか? どんな助けでも大歓迎です。

4

1 に答える 1

1

リンクで、多くの「require」ステートメントを追加する必要はないと彼が言うとき、彼はs.filess.executables、およびs.test_files配列にファイルを追加することを意味しているに違いありません。これらは、どのファイルが gem にパッケージ化され、どのファイルが無視されるかを決定します。 . gem 仕様からわかるように、特定のディレクトリで git によって追跡されるものはすべて、パッケージ化された gem に含まれます。

Ruby のrequire場合は別の話です。標準の require ルールは引き続き適用されます。

Ruby の gem システムは、実行時に Ruby が "foo.rb" を探すためのさまざまな場所を追加することで機能しますrequire "foo"Ruby がlib/my_gem.rbのコードのみを実行する場合"lib"、gem の唯一の必須パスである場合。lib/my_gem.rbが gem 内の他のファイルでない場合、Ruby はそれらを認識していないため、それらのファイルのクラスを使用しようとすると、未定義の定数エラーが発生します。require "my_gem"require

たとえば、私が書いた 2 つの単純な gem を見てください。どちらもHashToHiddenFieldsSimpleStatsbundle gemで始まりました。両方の gem で、 lib/にあるメインの Ruby ファイルには、gem が正しく動作するためにロードする必要があるすべてのものが必要です。たとえば、hash_to_hidden_​​fields.rbにはaction_view/helpers/hash_to_hidden_ ​​fields が必要です。これにより、定数 + モジュールが存在し、それを に含めることができます。ActionView::Helpers::HashToHiddenFieldsActionView::Base

それが質問に答えることを願っています。しばらくの間、Ruby の要求がかなり曖昧だったことは知っています。

于 2012-04-23T08:31:03.283 に答える