2011-08-19 40 views
0

我做这个补丁我test_helper.rb中测试rake任务RAILS_ENV设置

ENV["RAILS_ENV"] = ENV["RAILS_ENV_TEST"] || "test" 

这工作,因为我可以运行

RAILS_ENV_TEST=test_dan ruby -Itest test/unit/post_test.rb 

,但我希望能够给所有运行各种测试东西,包括rake db:test:clone但未使用环境test。我怎样才能做到这一点?

+1

没有帮助你的问题,但一些代码清理:'ENV [“RAILS_ENV”] = ENV [“RAILS_ENV_TEST”] || “test”'在同一行中相同 – arnep

+0

谢谢@arnep,编辑。 –

回答

2

命名空间为“test”的大多数rake任务只能在您的测试环境中运行,而不能在其他环境中运行。它被编入任务中以减轻它们在诸如生产环境中可能具有的破坏性影响。

您可以看到这些任务没有考虑在the source中调用它们的环境。

如果你想在任何你想要的环境下运行这些任务,你最好的选择就是重新创建这些任务并通过环境。

namespace :any_environment_test do 
    task :load => :environment do 
    ... 
    task :clone => :environment do 
    ... 

在这种特定的情况下,这是一个有点麻烦,因为它听起来像你想从任何环境任何环境克隆。如果是这种情况,那么您应该有两个通过的变量,例如FROM_ENV=TO_ENV=。长篇故事更长,你要写自定义任务,但可以从我上面发布的链接激发自己。 :)

+0

谢谢@ THEIV,这是很棒的东西。真的发生了什么是我们的database.yml是在源代码控制之下,所以拥有自己的测试数据库的唯一方法是使用特定的rails_env ... –

+0

@Yar对不起,但我不关注你的数据库受版本控制的.yml会影响您的情况。你能进一步解释吗? **附注**:是否有你的database.yml文件受版本控制的原因?你不能从存储库中删除它,并将其替换为类似database.yml.example的东西吗? – theIV

+0

感谢您的询问。我们设置的方式,我们的开发,分段和生产服务器共享一个代码库。这意味着每个人都有一个database.yml。因此,我要么为我自己的特定数据库连接创建一个新配置,要么让我的数据库适合database.yml。不,在政治上我不能将它从存储库中删除。 –