2013-11-22 32 views
3

我一直在考虑将我的SAAS应用程序推向国际市场,只是想知道其他人如何处理代码库的这种情况。在多个区域管理Ruby On Rails

显然有些事情需要更新(验证不同国家的手机号码),还包括账单更改。

我预见到平台的运行方式会有很多不同,但理想情况下会讨厌在不同的存储库中管理多个版本的Rails源代码。 (所以如果我在美国版本中修正了一个错误,我也必须切换到FRANCE版本并在那里应用)。

如果我把它全部保存在一个存储库中,会出现类似的恼人的事情;

  1. 管理多个的robots.txt和schedule.rb文件(的cron)
  2. 不同的网站促销和广告(虽然我想这可以根据DB)
  3. 关闭功能和超链接每个区域。 (美国有这个功能,但法国有功能等)
  4. 的源代码可能会导致混乱量身定制的谐音(_some_partial.en-US.html.erb和_some_parth.en-FR.html.erb)等
  5. 创建代码而功能则需要开发人员注意跨多个区域的后果。 (如果我为美国平台构建FEATURE-A,则必须构建代码以确保在法国平台上查看时关闭此功能)。

到目前为止的解决方案;

  1. 所有地区相同的代码;但用丑陋的if语句的逻辑(如果美国?ELSIF法国'端)
  2. 单独的存储库对每个区域
  3. 为每个区域独立的github分行和我工作过主人和归并到production_france等(其中有法国相关的提交也)
  4. Rails引擎??

怎么想Taskrabbit网站(他们只是在英国推出)或yelp跨区域做到这一点?

+1

而不是丑陋的if语句,您可以使用特定于该区域设置的配置文件,该文件将根据您的环境设置加载。 – Nishant

+0

用于配置文件。例如,将用于验证电话号码的正则表达式存储在配置文件中每个区域的配置文件中。在你的模型中,只需根据当前区域进行验证。 – Max

+0

为了扮演魔鬼的拥护者,我认为不同代码库的优势超过了拥有一个单一应用程序的优势。您可以在每个地区的基础上测试功能和升级,而不是将它们推广给所有人,您可以更轻松地将您的应用推介到不同地区/经济体。您已经处于需要测试每个区域的应用程序的位置。我宁愿维护比一个大型复杂应用程序更简单的应用程序。 – fatfrog

回答

0

我不确定是否有正确或错误的答案,但这里有一个意见。

  1. 使您的广告网站成为一个完全独立的代码库。在我所从事的项目中,实施营销变更而不必部署新版本的整个产品生态系统可能是一个真正的优势。让他们分开,因为很容易区分顾虑。针对营销网站上的简单内容更改,您并不是真的想要运行整个测试/部署流程。

  2. 我建议您查看现有的i18n插件/解决方案,并确定这些方法是否与您的产品相关。解决这个问题的大多数方法似乎是为每个区域创建具有自定义字符串/设置等的YML文件,然后让i18n类从YML文件部分抽取适当的东西。

  3. 我会假设每个地区可以决定每个用户?在过去,我在用户模型中设置了用户区域,我这样做了。这可以包括时区,语言等。然后我可以单独更改每个用户的体验。您可以通过用户模型来确定所有i18n选项的范围,因此,当您需要为每个用户获取某些内容时,会通过用户所在的区域进行过滤,然后将其扩展到i18n/YML文件设置。

  4. 不同地区真的需要不同的功能吗?这是似乎使事情复杂化的一个因素。如果您可以重新构建代码/产品以使所有功能保持一致,则可能会使事情变得更简单。