我有一些iPhone客戶端測試運行對我的開發軌道服務器。如果我在Rails配置中啓用類緩存,則整個套件的運行速度要快一個數量級。另一方面,當我沒有真正運行測試時,這會降低開發速度。我可以在Rails 3中以編程方式更改config.cache_classes嗎?
我想讓測試套件在開始時打開一個動作來打開類緩存,並在結束時再次執行另一個動作以關閉類緩存。
這甚至可能嗎?如果是這樣,怎麼樣?
我有一些iPhone客戶端測試運行對我的開發軌道服務器。如果我在Rails配置中啓用類緩存,則整個套件的運行速度要快一個數量級。另一方面,當我沒有真正運行測試時,這會降低開發速度。我可以在Rails 3中以編程方式更改config.cache_classes嗎?
我想讓測試套件在開始時打開一個動作來打開類緩存,並在結束時再次執行另一個動作以關閉類緩存。
這甚至可能嗎?如果是這樣,怎麼樣?
我不認爲做你的建議會奏效。
但我建議你可能在尋找錯誤的解決方案。
如果你想要從你的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
你應該有一個服務器,幾乎相同於您的開發服務器, ,但運行在不同的端口,啓用緩存。
不是沒有一些嚴重的黑客行爲。 Rails會遇到很多麻煩,以確保您的文件在每次請求時都被重新加載(當cache_classes=false
)時。所述cache_classes
配置變量的值中的幾個地方使用由初始化並非最不重要,其存在的:使用require
加載紅寶石文件時cache_classes是true
(意味着它們不再重新加載的)
cache_classes
是false
你確實有訪問cache_classes
變量的值,如果你喜歡,你甚至可以改變它:
Rails.configuration.cache_classes = true
但是,這會對工作軌實例作爲地方則使用該值僅在Rails應用程序啓動時運行一次初始化沒有影響。
這意味着什麼,除非你準備投入一些嚴肅的時間和黑客的努力,你真的不能避免重啓服務器。所以,你需要看的是通過你的測試套件來控制這個重啓過程。
例如,您可以嘗試重新啓動rails from within rails。這將允許你定義一個動作,你的測試套件可以在開始執行之前點擊它(以正確的模式重新啓動服務器),以及在所有測試完成後服務器可以擊中的另一個動作,以便通過設置cache_classes
到以前的樣子。您可以通過環境變量like this post suggests來控制緩存類的值。
它仍然需要一些工作來設置所有這一切,並讓它們掛在一起,但如果你想要一個「自動 - 神奇」的解決方案,這可能是你最好的選擇。
這並不是一個壞主意,有兩臺服務器並行運行,但它不能解決問題。每當我進行更改時,我仍然需要重新啓動這個新的測試服務器。 – ilya
我想你可能不得不決定'更快的請求與惱人的重啓'或'更慢的請求自動加載更改' –
是的,這是目前的情況。我只想在某段時間內打開「快速模式」。 – ilya