【发布时间】:2011-12-20 22:19:40
【问题描述】:
因此,我们希望将网站的一部分重新架构为 Rails 应用程序。最初的计划是拥有一个主要的“站点”应用程序,其中包含许多具有分隔功能的插件应用程序(Rails 3.1 引擎)——一个商店组件、一个社交/论坛/聊天组件等。此外,我们想要放置主题/styling 在 gem 中,以便我们的网页设计师可以修改网站外观和一些小的布局调整,而无需“了解 Rails”。最初,这进展顺利。我们创建了主要的架构和插件以及主题 gem,所有这些都很好地结合在一起;像身份验证这样的横切功能被放置在主“站点”应用程序中,并且可以由插件应用程序使用,从而为我们提供了站点的单点登录(设计要求)。
我们对商店组件的最初计划是使用 Spree (http://spreecommerce.com/),因为它具有开箱即用的 95% 以上我们需要的功能。然而,有一个问题——Spree 是作为可安装引擎分发的,但它也是一个应用程序。这意味着 Spree 不仅会安装在应用程序中(这不是问题,实际上这是我们所依赖的行为),而且它取决于对主应用程序的控制。调查这种行为的“原因”,它似乎取决于两个核心功能。第一个功能块是一些必须进入中间件的 SEO 永久链接重写功能;我们可以破解一些东西,以便我们的主应用程序包含这段代码(尽管这会开始在我们整个网站上纠缠存储功能,混淆“作为可安装引擎的 Spree”的故事......稍后会详细介绍)。
更复杂的是 Spree 使用 Deface 进行主题化和自定义。虽然这很“聪明”(注意引号),但它确实让 Spree 的整合成为一场噩梦。要么你走阻力最小的道路,让 Spree 成为一个独立的商店(这完全打破了我们关于“商店只是我们网站的一部分,并且与网站的其余部分,包括身份验证、主题等)相得益彰的故事."),否则你必须彻底摆脱 Spree。
不仅如此,Spree 还没有遵循标准的 Rails 引擎路由范例,其中路由被隔离在引擎根下(如果您查看 lib 的 routes.rb 文件,您可以看到它使用 Rails.Application 的路由,而不是引擎的路线)。这意味着我们不能拥有 www.oursite.com/store/...all_the_spree_goodness,我们必须拥有 www.oursite.com/spree_owns_the_sites_routes...
那么,有其他人尝试过吗?我们喜欢 Spree,并希望将其用作我们的商店。但它开始看起来没有真正的方法可以将它与我们网站的其他部分“集成”,除了可能使用 nginx 或类似的代理魔法(这是一个单独的噩梦,因为我们希望在 Heroku 上托管,然后我们必须弄清楚如何将多个不同的应用程序集成到一个数据库中——用于单点登录身份验证——以及一个 HTTP 前端路由器)。
Spree 开发人员,我们喜欢您的代码,但是是否有任何工作可以使其成为真正的、真正的 Rails 引擎,而不是碰巧打包的独立应用程序它的所有功能都融入了引擎?如果无法将其集成到现有网站中(包括不“拥有”应用程序、能够将其所有路由分区等等),我们就无法使用它:(
TIA。
【问题讨论】:
-
在阅读下面 Ryan 的回复后,我认为我的问题归结为两个子问题: 1. 我怎样才能将 Spree 用作真正的可挂载引擎?答:使用更高版本;在安装 edge Spree (1.0.0.beta) 之后,我希望的所有引擎优点(尤其是容易隔离的子路由)似乎都“正常工作”。 2. 我讨厌污点! (好吧,这不是问题 :) 情况仍然如此,但我想我可以覆盖视图并按照现有的每本 Rails 书籍演示的方式自定义它们,而不是为 everything。所以,我们会尝试一下。
标签: ruby-on-rails spree rails-engines