gpt4 book ai didi

ruby-on-rails - Rails Engines : When to put code in app, 何时在 lib 中,何时在 vendor 文件夹中?

转载 作者:数据小太阳 更新时间:2023-10-29 06:44:15 25 4
gpt4 key购买 nike

我正在开发一个 Rails 引擎,所以我对现有引擎进行了一些研究。我注意到他们中的许多人在 app 中都有文件,但也在 libvendor 中。

我很清楚,我应该将任何应该由主机应用程序替换的代码放入 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 正确地找到它?

最佳答案

关于开发重新加载问题,如果 lib 文件夹是您文件的自然存放位置,则将其添加到 Rails 的加载路径,如:

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

关于供应商 Assets 的具体情况,将引擎的 Assets 放在 app/assets 中似乎是合理的,主机 Rails 应用程序将在其中找到它们。

关于ruby-on-rails - Rails Engines : When to put code in app, 何时在 lib 中,何时在 vendor 文件夹中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com