【问题标题】:Managing Ruby On Rails with multiple regions使用多个区域管理 Ruby On Rails
【发布时间】:2013-11-22 04:37:55
【问题描述】:

我一直在考虑将我的 SAAS 应用推向国际市场,只是想知道其他人如何处理与代码库相关的这种情况。

显然,有些事情需要更新(验证不同国家/地区的手机号码)以及计费变更。

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

如果我将它们全部保存在一个存储库中,就会出现烦人的事情,例如:

  1. 管理多个 robots.txt 和 schedule.rb 文件(用于 cron)
  2. 不同的网站促销和广告(虽然我猜这可能是基于数据库的)
  3. 关闭每个区域的功能和超链接。 (美国有这个功能,但法国有那个功能等)
  4. 源代码可能会因定制的部分(_some_partial.en-US.html.erb 和 _some_parth.en-FR.html.erb)等而变得混乱
  5. 创建代码和功能需要开发人员注意跨多个区域的后果。 (如果我为美国平台构建 FEATURE-A,我必须构建代码以确保在法国平台等上查看时将其关闭)。

目前的解决方案;

  1. 所有地区的代码库相同;但使用丑陋的 if 语句进行逻辑(If US?elsif France?end)
  2. 每个区域的独立存储库
  3. 为每个区域单独的 github 分支,我处理 master 并将其合并到 production_france 等(其中也有与法国相关的提交)
  4. Rails 引擎??

Taskrabbit(他们刚刚在英国推出)或yelp 这样的网站如何跨地区做到这一点?

【问题讨论】:

  • 您可以使用特定于该语言环境的配置文件,而不是丑陋的 if 语句,这些文件会根据您的环境设置加载。
  • +1 用于配置文件。例如,将用于验证电话号码的正则表达式存储在配置文件中每个区域的配置文件中。在您的模型中,只需根据当前区域进行验证。
  • 我认为不同代码库的优势超过了单一应用程序的优势。您可以在每个地区测试功能和升级,而不是将它们推广给所有人,您可以更轻松地将您的应用程序定制到不同的地区/经济体。您已经处于需要为每个区域测试您的应用程序的位置。我宁愿维护更简单的应用程序,而不是 1 个大型复杂的应用程序。

标签: ruby-on-rails ruby-on-rails-3 git


【解决方案1】:

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

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

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

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

  4. 不同地区真的需要不同的功能吗?这是使事情复杂化的一个因素。如果您可以重新设计代码/产品以使所有功能都相同,它可能会使事情变得更简单。

【讨论】:

    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多