我们今年在Rails 3(计划升级到rails 4)中开发了一款应用程序。 我们已将其出售给2位客户,现在问题将开始。
在核心中,除了样式表,一些html和一些类之外,所有应用程序或多或少都相同。
现在我正在寻找一种管理这些应用程序的方法,例如我们有100位客户在运行该产品。
因此有以下问题:
亲切的问候。
EDIT1:我们提供的东西是一个拥有核心的网站,但每个客户都可以从核心到设计更改网站的任何内容。
EDIT2: RAILS CODE:我们有一个Rails管理界面,假设我们通过设置自定义所有代码:
If Settings.value_shown == true
User.do_something
else
User.do_something_else
end
CSS / SASS CODE:假设我们制作了1个干净的CSS,每个客户我们创建一个覆盖所有标准代码的覆盖类。
EDIT3:假设50个客户中的每个客户都有3个分支机构的DEV / QUALITY / PRODUCTION系统。我们为所有客户开发了一个修复程序,如何将此修复程序部署到所有客户?
答案 0 :(得分:2)
将不同客户的代码放入不同的分支是第一个问题。您应该真正自定义每个客户代码沿其他轴。例如,您可以为每个客户或某种插件架构创建一个单独的目录,其中客户的特殊代码位于不同的项目中。或者您将所有代码放在一个大的东西中,并添加一些每个客户的配置。
但不同客户的$ N不同分支意味着代码的N个副本,您必须手动修补它们。不要那样做。
谷歌的一个好关键词是“软件产品线”,因为这就是你要做的事情: - )
答案 1 :(得分:1)
我得到的印象是你难以解决这些差异?这不会扩展,您需要为所有客户部署相同的代码库,否则您将为自己设置一个巨大的头痛。
将所有可自定义组件构建为客户端设置并将其存储在数据库中,以便所有客户端都可以从相同的代码库运行。如果它们需要能够更改布局和组件,那么请使用Shopify的Liquid或类似内容来查看构建内容。我没有用它,但我听说它很棒。
答案 2 :(得分:0)
可能有很多方法可以解决这个问题,但这是我的想法:
如果您有以下文件夹结构
app
views
users
sessions
dashboard
etc. etc.
您可以升级到以下内容:
app
views
clientA
users
sessions
dashboard
clientB
users
sessions
dashboard
根据要求为单个客户生成标记。要呈现适当的客户端“views”文件夹,请使用:
ApplicationController
before_filter :load_views
def load_views
client = current_user
#assuming that client.name is some unique identifier which points to folder name in app/views directory
prepend_view_path "app/views/#{client.name}/"
end
end
我希望这会有所帮助。