2013-01-18 48 views
0

我正在通過Hartl的Ruby on Rails教程開展工作,並且偶然發現了一個與開發和測試環境運行方式不同的問題。Rails教程; Rails環境

簡而言之,兩種環境不同步。開發環境似乎正常工作,但正在進行的一些更改不會傳播到測試環境。

例如,在application.html.erb中進行編輯將導致該更改在測試環境中被複制。但是,在_header.html.erb中進行更改不會。這就是我注意到這個問題的原因 - 對標題的新鏈接存在的測試失敗了,而我正在瀏覽器中(在開發環境中)盯着它們。

我試圖弄清楚另一個怪癖:如果我在測試環境中使用rails server --environment test運行本地服務器,並啓動瀏覽器,則應用程序將保持「固定」狀態。我的意思是,對應用程序代碼或HTML/CSS文件所做的任何更改都不會在瀏覽器中複製。爲了看到任何更改,本地服務器必須關閉並重新打開。然後,這個加載測試環境的可見變化。

這兩個環境數據庫是相同的(我運行了rake db:migraterake db:test:prepare,因爲我在本教程中添加了遷移,並且已經通過sqlite 3查看器確認數據庫是相同的)。

我想這個問題源於我對Rails環境的一些基本的誤解 - 任何幫助都將不勝感激。

爲了完整起見,當我第一次注意到這個問題時,我正在完成第8章(添加登錄/註銷身份驗證)。

+0

這沒有多大意義。啓動*相同文件夾中的服務器*將使用相同的文件,而不考慮環境。你確定你在*相同的文件夾*?請記住,有時PWD很棘手。 – fotanus

回答

2

軌通常在生產環境中不提供靜態文件(如HTML和CSS),如果你想這樣做,你應該說這在production.rb:

config.serve_static_assets = true 

但是,如果你運行生產,你應該運行一個網絡服務器如Apache或NginX ,在這種情況下,他們負責提供靜態文件。

0

您注意到不同環境下有不同的行爲是正確的。 只有開發環境在每個瀏覽器請求上重新加載應用程序。測試和生產環境基本上緩存了應用程序目錄中的所有內容(請參閱this SO answer) - 基本上,它們只記錄服務器啓動時的代碼版本。這是爲了性能和/或降低波動性而完成的。表現是有道理的,但波動性可能需要更多的解釋。

假設您正在運行測試並同時編輯代碼。測試將在您運行測試之前運行代碼版本,而不是您之後做出的任何更改。在測試過程中重新加載資產就像是在高速公路上拆下一輛車,時速爲60公里。根據你正在分解的內容,它可能會有很多意想不到的後果。可能不是災難性的,但至少可能會危及運行測試。

如果您的問題是您的測試失敗,因爲它們沒有針對最新版本的代碼運行,那麼您可能會遇到緩存問題 - 特別是如果您使用spork,Hartl的Rails教程推薦的最後一章。您可能需要重新啓動spork。