我应该 copy/paste 从 Spree 到我自己的应用程序的所有控制器和路由吗?

Should I copy/paste all controllers and routes from Spree to my own app?

我正在学习 RoR,显然 Spree 和一些我不清楚的事情。我也不完全熟悉 Rails 引擎。

我的问题是我应该从 Spree github 页面复制所有控制器和路由然后覆盖它们,还是它们已经 "booted" 通过引擎?

另外,我注意到有些人使用 Deface 来覆盖他们自己应用程序上的内容。从 github 代码 copy/paste 然后修改它不是更容易吗?或者它有一些技巧?

谢谢

gems 的整体思想是它们是您可以使用的包分发机制,而不是复制粘贴代码。

大多数现代语言都有某种包分发。 Ruby 选择的包管理器是 Bundler

应该始终使用它而不是复制粘贴,因为:

  1. 复制粘贴容易出错且乏味。
  2. 您不会用供应商代码使代码存储库膨胀,这样更易​​于维护。
  3. 包管理器可以进行依赖关系树解析以确保您的依赖关系彼此兼容。
  4. 现在不是 1995 年,复制粘贴图书馆会让人怀疑你的能力。

如果您出于任何原因需要修改 gem,您可以分叉存储库并告诉捆绑程序使用您的分叉。但在大多数情况下,这是最后的手段,因为 Ruby 是一种极其灵活的语言。

My question is should I copy all controllers and routes from Spree github page and then to overwrite them or they are already "booted" through engine?

没有。只需安装 gem。它很可能是可配置的,并提供了选项来根据您的意愿对其进行自定义,而无需更改 gem 的任何代码。

或者在许多情况下,您可以只使用 object oriented programming 配置您自己的 gem 提供的控制器子类型。

Deface 用于在渲染后修改视图。它基本上是使用正则表达式的更完善的版本,因此如果问题可以首先通过使用部分或帮助程序使代码更加模块化来解决,那么它就相当老套了。它与路由或控制器无关。