2011-03-12 126 views
14

是在軌道控制檯(~ rails c)動態?例如;如果我打開控制檯,然後對模型進行更改,它是否會選擇這些更改,還是必須退出控制檯並再次運行rails c才能獲取模型中的更改?導軌控制檯是否動態?

回答

35

您需要在控制檯中調用reload!方法來重新載入更改。這種方法的魔法在開發模式下由rails server自動調用。

作爲評論的指出下方,這裏另一個答案,如果你改變的事情要做應用的環境,如添加新的寶石到Gemfile,在config做出改變任何東西,或添加新的插件那麼你需要重新啓動控制檯。 app的任何更改將可以重新加載reload!

如果您正在使用此特定方式來測試某個方法正在工作,我不會。測試(如Test :: Unit或RSpec)變體更好,因爲你有一種重複的方式來反覆運行它們。 rails console非常適合一次性測試,但如果你想編寫一個可維護的應用程序,然後編寫測試。

+1

如果更改了寶石或插件,則需要退出並重新啓動控制檯; '重新加載!'不包括這些類型的東西。 – 2011-03-12 04:18:40

+3

這是一個不明顯的例子。假設f是Foo類的一個實例。如果你改變Foo,輸入'reload!',甚至是'f.reload',f.bar仍然不會更新。你需要重新分配Foo。至少,這就是它在Ruby 1.9.3p125和Rails 3.2.0上使用RVM的OS X Lion上的工作原理。 – Aaron 2012-03-24 21:21:16

+0

@Aaron,'f'在內存中,所以即使您更改數據庫中的數據直到您重新分配它,它也不會更改。 – Ari 2015-04-02 01:16:41

1

正如Ryan指出的那樣,您需要調用reload!重新加載更改。您還應該注意到一些更改要求您退出並重新啓動控制檯。這些更改包括更新配置或環境文件等內容(我不確定完整列表是什麼)。