我是一名开发人员,正在尝试确定开发 Rails 应用程序的最佳方法。我需要提供一些部署选项,并尝试将开发成本和长期托管成本降至最低。
设想一个允许多位作者合作完成一个“作品”的网站,无论是小说、技术手册还是源代码。“用户”可以“签出”章节,进行修改并将更改合并回去。用户对彼此的修改进行评分,评分越高,访问的内容就越多。我们称之为“社交版本控制”
虽然可以编写一个可以区分“作品”的 Rails 应用程序,但从编码角度来看,将每部作品托管为自己的 Rails 应用程序可能更容易。“主”应用程序将创建/控制每个作品服务器实例,允许浏览作品以搜索作者,并成为网站所有者的报告中心。现在,假设最简单的方案是每部作品使用特定于端口的 URL:
Master - http://collabowork.it
My Novel - http://collabowork.it:3001
Some Manual - http://collabowork.it:3002
Another work - http://collabowork.it:3003
我的问题是:在一台机器不堪重负之前,我能够在一台机器上运行多少个 Rails 实例?有没有办法确定一台商用服务器上可以运行多少个实例?有没有其他选项可以以低成本扩展额外的工作(也许在 EC2 或类似服务器上)。由于这不是为赚钱而设计的,部署它的最便宜的方法是什么(除了额外的编码工作)。在提供替代方案之前,我希望进行某种成本分析,但我不知道如何开始确定这样的规模。
任何想法或意见都将受到赞赏。
答案1
我有一些和你非常相似的东西。
我们在一个目录中有一个应用程序。此应用程序是为多个不同的客户端设置的。每个客户端之间的唯一区别是它们使用的数据库。当我们设置它时,我认为为每个客户端设置不同的端口不太好,因此我们采取了不同的方法。
我知道 Apache 在 Rails 领域并不十分流行,但它仍然是一款出色的软件。我们使用 Apache 基于名称的虚拟主机和 Passenger3 来解决这个问题。在新版本中,您可以使用相同的应用程序目录为每个虚拟主机定义一个 RailsEnv。该指令称为“PassengerAppGroupName”。
你会得到一个类似这样的虚拟主机:
<VirtualHost _default_:80>
ServerName preprod.xxxx.fr
DocumentRoot /var/xxxx/current/public/
TimeOut 5000
# Passenger directives
PassengerHighPerformance on
PassengerAppGroupName "preprod"
RailsEnv preprod
# Logging
ErrorLog /var/log/apache2/preprod-error.log
CustomLog /var/log/apache2/preprod-access.log combined
</VirtualHost>
我认为这个例子应该能说明问题。此解决方案允许您使用用于连接的 HTTP 主机来分离应用程序。
总而言之,如果“作品”具有相同的代码库,那么您可以使用这个恕我直言的干净解决方案。
编辑 :在性能方面,Apache/Passenger 需要 512MB 的 RAM。我发现低于这个数字的任何值都会导致性能不佳,但 YMMV。我认为如果您添加更多虚拟主机,它不需要更多 RAM。