オートロードの魔法
自動読み込みが行われるフォルダーを制御するオプションは、他の回答で十分にカバーされていると思います。ただし、オートロードパスが必要に応じて変更されているにもかかわらず、他の誰かがロードに問題を抱えている場合、この回答はこのオートロードの背後にある魔法が何であるかを説明しようとします。
したがって、サブディレクトリからのものをロードすることになると、注意すべきことや慣習があります。Ruby / Railsの魔法(今回は主にRails)が原因で、何かが発生している理由を理解しにくい場合があります。自動ロードパスで宣言されたモジュールは、モジュール名が親ディレクトリ名に対応する場合にのみロードされます。したがって、lib/my_stuff/bar.rb
次のようなものに入れようとする場合:
module Foo
class Bar
end
end
自動的に読み込まれることはありません。次に、親ディレクトリの名前を変更して、foo
パスでモジュールをホストするとしますlib/foo/bar.rb
。それはあなたのためにあります。別のオプションは、モジュール名でオートロードしたいファイルに名前を付けることです。当然、その名前のファイルは1つしか存在できません。ものを多くのファイルに分割する必要がある場合、もちろんその1つのファイルを使用して他のファイルを要求することはできますが、開発モードで他のファイルを変更すると、Railsが自動的に変更できないため、お勧めできません。それらをリロードしてください。ただし、本当に必要な場合は、モジュールを使用するために必要な実際のファイルを指定するモジュール名で1つのファイルを作成できます。:2つのファイルを持っている可能性がありますので、lib/my_stuff/bar.rb
とlib/my_stuff/foo.rb
し、上記と単一ラインを含む、後者と同じもの旧:require "bar"
それでも同じように機能します。
PSもう1つ重要なことを追加せざるをえません。最近、自動ロードする必要があるlibディレクトリに何かを置きたいときはいつでも、これが私が実際にこのプロジェクトのために実際に開発しているものである場合、それは通常、いつか多くのプロジェクトやgitサブモジュールなどで使用されるコードの「静的な」スニペットに変換します。その場合は、必ずlibフォルダーに配置する必要があります)、おそらくその場所はlibフォルダー内にありません。多分それはappフォルダーの下のサブフォルダーにあるべきです。これは物事を行うための新しいRailsの方法だと感じています。言うまでもなく、オートロードパスのどこにものを置いても、同じ魔法が働いているので、これらのことに適しています。とにかく、これはこの件に関する私の考えです。あなたは反対することができます。:)
更新:魔法の種類について..
セヴェリンが彼のコメントで指摘したように、コアの「モジュールメカニズムのオートロード」は確かにRubyの一部ですが、オートロードパスの要素はそうではありません。Railsは必要ありませんautoload :Foo, File.join(Rails.root, "lib", "my_stuff", "bar")
。そして、初めてモジュールFooを参照しようとすると、モジュールがロードされます。ただし、Railsが行うことは、登録されたフォルダーから自動的にコンテンツをロードおよびロードする方法を提供することです。これは、命名規則について想定する必要があるように実装されています。そのように実装されていなかった場合、現在ロードされていないものを参照するたびに、すべてのオートロードフォルダー内のすべてのファイルを調べて、参照しようとしているものがそれらのファイルに含まれているかどうかを確認する必要があります。これは、順番にオートロードとオートリロードのアイデアを無効にします。ただし、これらの規則が適切に設定されていると、定義されている可能性のある場所にロードしようとしているモジュール/クラスから差し引いて、それをロードすることができます。
app/lib
。