我怀疑是一个不寻常的设置。我们有一个Rails应用程序,这是我们向客户销售的东西。我们还将捆绑的业务功能打包成可选插件,客户可以根据需要购买这些插件。我们已经完成了这些作为Rails插件/引擎,以保持它们很好地分离。
这迫使我们所有业务插件都依赖于应用程序本身的异常要求。换句话说,框架位于主Rails应用程序文件夹中,而业务模块位于vendor / plugins中。换句话说,如果他们依赖特定的应用程序文件夹,他们几乎不会插件。或者是他们?
这确实有效,所以我的问题出于建筑的好奇心,而不是寻求帮助。但是,这应该被视为滥用插件/引擎系统吗?或者这是Rails引擎的一个潜在有用的应用程序?
布伦登。
答案 0 :(得分:1)
我没有看到插件具有依赖关系的问题,只要这些插件是合格且易于理解的。如果没有Rails,Rails插件就没什么了,通常它需要一个特定的版本。
糟糕的设计是拥有一个插件,如果它无法正确加载而不会产生某种有用的消息,它将破坏应用程序。例如,您可以在以英尺优先发布之前测试环境。
这样做的一种非常强力的方式,但至少提供反馈,在插件的初始化器中可能是这样的:
unless (defined?(MyApp))
raise "MyAppPlugin requires MyApp to be installed"
end
您可以通过为您的应用制作私有宝石并更正式地设置要求来更优雅地完成此操作。新的Bundler系统使这成为可能。