2011-08-19 65 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。不,在政治上我不能將它從存儲庫中刪除。 –