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

Ruby on rails 如何测试Rails应用程序在生产环境中是否正常工作,ruby-on-rails,testing,production-environment,Ruby On Rails,Testing,Production Environment,我正在用TDD编写一个rails应用程序,所以,我想知道,如何测试生产应用程序,比如使用不同于开发安全令牌的安全令牌,如何确保所有配置在生产中都是正确的,比如邮件配置等 我们不应该永远在生产模式下运行测试,因为它会删除数据库 那么,在生产环境中如何测试rails应用程序呢?当您运行测试时,您总是在测试环境中,因为rails\u ENV是在test\u helper.rb中硬编码的。设置RAILS\u ENV=production意味着将从生产数据库而不是开发数据库克隆架构。我当然可以在生产服务器

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

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


那么,在生产环境中如何测试rails应用程序呢?当您运行测试时,您总是在测试环境中,因为
rails\u ENV
是在
test\u helper.rb
中硬编码的。设置
RAILS\u ENV=production
意味着将从生产数据库而不是开发数据库克隆架构。我当然可以在生产服务器上建立一个开发数据库,但这似乎没有意义

考虑到我的开发服务器和生产服务器之间存在的所有差异——操作系统、web服务器、数据库、gems等——除非首先在开发和生产中运行我的测试套件,否则部署我的应用程序会让我感到很不舒服。多亏了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
desc“在部署的应用程序上运行完整测试。”
任务:运行测试
运行“cd#{release_path}&&RAILS_ENV=production-rake&&cat/dev/null>log/test.log”
结束
desc“在特定于服务器的配置文件中复制”
任务:复制\u共享do

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


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

我不知道这一点。您是否应该改为不设置
RAILS\u ENV=test
?如果您将
RAILS\u ENV=production
,它不会进入生产数据库吗?如果您正在运行测试,则无需将
test
设置为环境,因为默认情况下它已经是
test
。在
test\u helper.rb
中,您将看到顶部的行-
ENV[“RAILS\u ENV”]=“test”
故意这样做。对于生产,是的,您必须通过
rails\u ENV=production
@MyGod将rails环境设置为production,我想Amir是说,使用
rails\u ENV=production
测试生产会将测试数据与生产数据混合,并且可能对后者产生负面影响。我想用生产环境来编写代码,但要测试数据库。。。这可能是重新配置测试的数据库配置或为此类测试创建新环境。我很好奇其他最佳实践是什么,因为我也希望知道测试是否成功,不仅是在登台测试,而且是在生产测试。