2010-08-12 30 views
10

我有一台生产服务器和一台登台服务器,在将新功能移至生产环境之前,其中会对新功能进行测试。登台服务器在物理上与生产服务器不同(具有不同URL的不同主机),但它尽可能地模仿它(即相同的包裹,相同的宝石等)。Rails:从生产中区分舞台

Rails.env = 'production'在两台服务器上。

我的问题是,在某些情况下,我需要不同的行为在舞台上比生产。

例如,新功能可能会向生产用户发送大量电子邮件;但是当我测试它时,我宁愿让它们发送到'测试'电子邮件帐户。

什么是检测我在服务器的最佳方式?

我想尽可能做到“暴躁”。

非常感谢。

回答

23

通常,这就是为什么你会使用不同的环境。实际上,临时环境通常非常接近生产,但关闭了真正的电子邮件等内容。

您不仅限于开发/测试/生产 - 您可以在任何你想要的环境下运行。只需创建一个config/environments/staging.rb文件,在那里设置你想要的值,然后用RAILS_ENV = staging启动你的应用 - 这就是它的全部内容。这样,您就可以模拟您的生产环境,但是如果您希望在实际上线之前不希望它们处于活动状态,则可以根据需要开启或关闭功能。

+0

谢谢。我最终改变了环境(实际上相对容易),现在一切都按预期工作。 – kikito 2010-08-14 14:15:40

-1

恐怕这个答案不是非常有帮助。

railsy的方式是让环境仅在不同环境下的配置(资产主机,数据库等)不同。因此,与用户拥有虚拟或测试电子邮件地址的不同数据库将是最简单的方法。

如果您通常从Production进行克隆,我建议通过script/dbconsolescript/console或简单的简单rake任务更新所有用户的电子邮件。

如果你想限制/控制功能,那么我建议通过源代码控制来做到这一点,即通过部署不同的修订版。