我是使用RoR-CoffeeScript-Sass-Passenger-Apache的开发人员。我们使用EC2进行部署,我们使用Macbook Airs进行开发。虽然rails社区非常适合Mac,但由于dev与prod的整个部署堆栈差异,我使用的是virtualbox + ubuntu,而我的同行正在开发OS X本机。
使用OS X Native会增加更多问题,因为我们在堆栈中有更多依赖项(Solr,Beanstalk,Mongodb等在Ubuntu中运行良好)
我正在寻找关于如何使用Mac和Amazon EC2的Rails开发人员可以设置他们的开发和生产环境的建议。
还希望得到关于使用vagrant来分发此用例的开发环境的反馈。
答案 0 :(得分:3)
通常的做法是将您的堆栈复制为“暂存”环境。使用EC2,您可以创建现有计算机的AMI并复制它们,仅将其打开以进行测试部署,并在将其部署到生产环境之前运行测试以确保一切正常运行。或者通常您可能希望永久保留它,以便开发人员可以根据需要快速部署更新或补丁进行测试。
这样做可确保您在推出之前拥有生产系统的精确副本以进行测试,从而消除与部署潜入生产相关的任何(灾难性)问题。
答案 1 :(得分:2)
我们的团队一直在Mac上开发并在EC2上部署到Ubuntu已有三年了,但问题很少。有几件事使这个过程变得顺畅:
我们可以在Mac上运行整个应用程序堆栈**。在macports,自制软件和必要时从源代码构建之间,我们设法让我们运行的每一项技术都在我们的开发盒上工作。这些部分配置和组合在一起的方式在本地是不同的(例如,在prod中,我们自动发现我们的memcached实例,而在本地它是硬编码的)但是每次集成都可以在Mac上进行测试,然后再进行prod。
我们的连续构建系统与我们的产品盒设置相同。这意味着如果您签入一些依赖于某些本地魔法的代码,就会很快发现它。
我们运行一个浸泡(有些人称之为staging或integ)堆栈,其配置与生产相同。这有时会导致一些开发开销,但有很多好处,这是值得的。在推送到prod之前,所有代码都会通过此堆栈。
这种设置运行良好,随着时间的推移,我们允许设置的更多部分分开。我们曾经在当地经营乘客(就像我们做的那样),但现在使用Pow。在升级堆栈的其余部分之前,我们会定期在开发中尝试新的ruby版本。
我必须使用虚拟化环境开发其他项目(VirtualBox中的OSX + CentOS),并且肯定发现它更加痛苦,全天然。首先,感觉就像管理两台机器而不是一台机器。一切都感觉到了懒散。
如果有一块在Mac上运行很痛苦的堆栈,我肯定更愿意接受这样的打击:a)花时间让它在本地工作或b)抽象掉那块,而不是支付处理虚拟环境的税收。
**我在本次讨论中仅包含Rails应用程序和直接依赖项。例如,我们使用puppet配置我们的EC2机队,但不要在我们的开发箱上运行它。