12

我有一个生产服务器和一个登台服务器,在将新功能转移到生产之前在其中进行测试。登台服务器在物理上与生产服务器不同(不同主机具有不同的 url),但它尽可能地模仿它(即相同的包、相同的 gem 等)。

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

我的问题是,在某些情况下,我在暂存时需要与生产中不同的行为。

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

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

我想尽可能“轻而易举”地做到这一点。

非常感谢。

4

2 回答 2

24

通常,这就是您使用不同环境的原因。实际上,登台环境通常非常接近生产环境,但关闭了真实电子邮件之类的东西。

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

于 2010-08-12T07:40:49.230 回答
-1

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

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

如果您通常从生产环境中克隆,我建议您更新所有用户的电子邮件,无论是通过简单的任务script/dbconsole还是script/console简单的rake任务。

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

于 2010-08-12T07:42:44.910 回答