13

私はRailsエンジンを開発しているので、既存のものをいくつか見てみました。appそれらの多くが だけでなく、libおよびにもファイルを持っていることに気付きましたvendor

ホストアプリで置き換え可能なコードをフォルダーに配置する必要があることは明らかですapp(たとえば、モデルがあるapp/user.rb場合、ホストアプリは独自のapp/user.rbファイルを簡単に作成し、エンジンの代わりにこれを使用できます)。

libしかし、いつ に何かを入れなければならないのか、いつvendor? ではvendor、自分のプロジェクトで使用したい他の開発者またはプロジェクトからの「外部」コードのみを配置する必要があり、プロジェクトでlib実際に作業している独自の追加ライブラリを配置する必要があると考えました。しかし、たとえば、なぜ WiceGrid はwice_grid/vendor/assetsディレクトリに何かを入れるのでしょうか? 私には外部コードのようには見えませんが、WiceGrid 用にのみ開発されたコードであるため、libディレクトリに配置する必要がありますか?

アップデート

lib少し実験しているうちに、エンジンの開発中にフォルダー内のすべてのコードがリロードされないことに気付きました(vendorディレクトリの場合も同じだと思います) app

たとえば、次のようにlib/iq_list_controller.rbいくつかのクラスとインスタンス メソッドを保持ApplicationControllerするファイルがありますengine.rb

initializer "wice_grid_railtie.configure_rails_initialization" do |app|
  ActiveSupport.on_load(:action_controller) do
    extend  IqList::Controller::ClassMethods
    include IqList::Controller::InstanceMethods
  end
end

Rubyが適切に見つけられるようにするには、このファイルをどこに配置すればよいですか?

4

3 に答える 3

6

開発のリロードの問題に関して、lib フォルダーがファイルの自然なホームである場合は、次のように Rails のロード パスに追加します。

module MyEngine
  class Engine < ::Rails::Engine
    config.autoload_paths << File.expand_path("../../lib", __FILE__)
  end
end

ベンダー アセットの特定のケースに関しては、エンジンのアセットを app/assets に配置するのが合理的と思われます。ホスト Rails アプリによって検出されます。

于 2013-07-11T10:06:50.960 に答える
1

MVC の基本的なコードは app フォルダーにあります。頻繁に使用される一般的なメソッド/モジュールがあるとします。コードに DRYness を実装するには、すべての一般的なユーティリティと一般的なユーティリティを単純に lib フォルダーに配置します。

libをいつ使用し、レールでlibフォルダーを使用するかについての美しい説明があります

于 2014-06-10T10:46:47.717 に答える