2015-09-27 54 views
3

我正在使用Rails控制檯手工測試一些東西,發現我的一個初始化程序(在config/initializers下)有錯誤。我退出了控制檯,進行了更改,並再次運行「rails c」。令我驚訝的是,更新後的初始化程序未被執行。Rails控制檯是否會重新初始化?

以下是我發現:

- 如果我開始一個新的bash命令,進入「軌道C」的所有初始化得到執行。

- 如果我添加/更改初始化程序,然後在同一個Bash會話中重新運行「rails c」,則不會執行初始化程序。

這發生在禁用高速緩存的開發中。

這是怎麼回事?謝謝。

+0

應該加載... –

+0

是的,這就是我的期望。因此我的問題。 :) – Brendan

+2

你試過重新啓動彈簧嗎? –

回答

14

Spring的引入意味着通過將應用程序的副本保留在內存中並僅重新載入更改,可以更快地加載您的rails應用程序。

不幸的是,有時你的初始化器可以保持完全一樣,但是它們需要重新運行。一個例子是「business_time」gem,它生成一個加載YAML文件的初始化程序。您可以更改YAML文件並重新啓動控制檯,但Spring會發現您的初始化程序沒有更改,因此它不會重新運行它。因此,您的YAML文件的更改不被注意,這是一個非常難以排除故障的錯誤。

如果您有任何初始化的問題,然後退出了控制檯,然後運行:

bundle exec spring stop 

打算回控制檯前。這將迫使初始化器重新加載。

您也可以通過從Gemfile中刪除gem來完全禁用Spring。

+0

不能相信這一點,浪費了1.5個小時試圖弄清楚爲什麼ENV變量在初始化程序中顯示爲「無」,直到一位同事指出了這一點。 – Steve

2

鍵入以下命令進入軌道

reload! 

這是刷新你的軌道ç

+2

小心,不要初始化;) –