5

我有一些iPhone客戶端測試運行對我的開發軌道服務器。如果我在Rails配置中啓用類緩存,則整個套件的運行速度要快一個數量級。另一方面,當我沒有真正運行測試時,這會降低開發速度。我可以在Rails 3中以編程方式更改config.cache_classes嗎?

我想讓測試套件在開始時打開一個動作來打開類緩存,並在結束時再次執行另一個動作以關閉類緩存。

這甚至可能嗎?如果是這樣,怎麼樣?

回答

0

我不認爲做你的建議會奏效。

但我建議你可能在尋找錯誤的解決方案。

如果你想要從你的iphone測試中訪問你的開發數據庫,​​那麼爲什麼不添加一個新的環境。

添加新文件的config /環境/ iphone_dev.rb

require File.dirname(__FILE__)+"/development.rb" 
config.cache_classes = true 

而在你的database.yml(或mongoid.yml或其他)

iphone_dev: 
    host: localhost 
    database: my_app_development 

沒有理由數據庫斜面相同

現在只需運行rails server -eiphone_dev -p3001

你應該有一個服務器,幾乎相同於您的開發服務器, ,但運行在不同的端口,啓用緩存。

+0

這並不是一個壞主意,有兩臺服務器並行運行,但它不能解決問題。每當我進行更改時,我仍然需要重新啓動這個新的測試服務器。 – ilya

+0

我想你可能不得不決定'更快的請求與惱人的重啓'或'更慢的請求自動加載更改' –

+0

是的,這是目前的情況。我只想在某段時間內打開「快速模式」。 – ilya

1

不是沒有一些嚴重的黑客行爲。 Rails會遇到很多麻煩,以確保您的文件在每次請求時都被重新加載(當cache_classes=false)時。所述cache_classes配置變量的值中的幾個地方使用由初始化並非最不重要,其存在的:使用require加載紅寶石文件時cache_classes是true(意味着它們不再重新加載的)

  • 設置

    • 調度回調reaload應用在每次請求時cache_classesfalse

    你確實有訪問cache_classes變量的值,如果你喜歡,你甚至可以改變它:

    Rails.configuration.cache_classes = true 
    

    但是,這會對工作軌實例作爲地方則使用該值僅在Rails應用程序啓動時運行一次初始化沒有影響。

    這意味着什麼,除非你準備投入一些嚴肅的時間和黑客的努力,你真的不能避免重啓服務器。所以,你需要看的是通過你的測試套件來控制這個重啓過程。

    例如,您可以嘗試重新啓動rails from within rails。這將允許你定義一個動作,你的測試套件可以在開始執行之前點擊它(以正確的模式重新啓動服務器),以及在所有測試完成後服務器可以擊中的另一個動作,以便通過設置cache_classes到以前的樣子。您可以通過環境變量like this post suggests來控制緩存類的值。

    它仍然需要一些工作來設置所有這一切,並讓它們掛在一起,但如果你想要一個「自動 - 神奇」的解決方案,這可能是你最好的選擇。

  • 相關問題