如何测试Rails应用程序在生产环境中是否正常工作

时间:2013-01-17 08:55:18

标签: ruby-on-rails testing production-environment

我正在编写TDD的rails应用程序,所以,我想知道,我如何测试生产应用程序,比如从开发安全令牌中获取不同的安全令牌,如何确保所有配置在生产中都是正确的,如邮件配置等。

我们不应该在生产模式下运行测试,因为它会擦除数据库。

那么,如何在生产中测试rails应用程序

2 个答案:

答案 0 :(得分:7)

许多开发人员使用的方法是创建另一个名为stage的环境。您可以使您的配置与生产相同,并在生产之前部署到此配置,以确保一切正常。如果您愿意,可以针对分段运行集成测试/性能测试。

您可以将生产配置(config / environments / production.rb)复制到名为stage.rb的新文件中,然后记住使用阶段数据库的新连接详细信息填充database.yml。

答案 1 :(得分:1)

当您运行测试时,由于RAILS_ENVtest_helper.rb被硬编码,因此您始终处于测试环境中。设置RAILS_ENV=production表示将从生产数据库而不是开发数据库克隆模式。我当然可以在生产服务器上设置开发数据库,​​但这似乎没有意义。

鉴于我的开发和生产服务器之间存在所有差异 - 操作系统,Web服务器,数据库,宝石等 - 除非我第一次运行我的测试套件,否则我不能真正放心部署我的应用程序而且还在生产中。感谢Capistrano的美丽而强大的API,这是在公园散步,以实现:

以下是一个如何完成的示例 -

desc "Run the full tests on the deployed app." 
task :run_tests do
 run "cd #{release_path} && RAILS_ENV=production rake && cat /dev/null > log/test.log" 
end

desc "Copy in server specific configuration files"
task :copy_shared do
  run <<-CMD
    cp #{shared_path}/system/voxway.rb #{release_path}/config &&
    cp #{shared_path}/system/database.yml #{release_path}/config
  CMD
end

desc "Run pre-symlink tasks" 
task :before_symlink, :roles => :web do
  copy_shared
  run_tests
end