> rvm list
rvm rubies
=* ruby-1.9.2-p290 [ i686 ]
ruby-1.9.3-p194 [ i686 ]
> rails -v
Rails 3.1.1
相关问题,但未得到答案:Is there a Rails Console command (Rails 3+) to reload changed code?
我正在使用Rails控制台尝试弄清楚为什么我的模型中的方法没有被调用。该模型位于./app/models/product.rb。我将一个方法从self.trim_history
更改为trim_history
。我还在思考何时将方法称为self.do_stuff
或只是do_stuff
。
在解决这个问题的过程中,我遇到了reload!
的问题。我的理解是,reload!
会重新加载所有模型和控制器,但似乎并没有起作用。当我调试代码时,已更改为do_stuff
的行仍显示为调试器中的self.do_stuff
。
我尝试使用reload!
来解决此问题,但无法修复它。我重新加载了数据库中的对象,但也无法解决。我直接使用load './app/models/product.rb'
加载了模型,然后从数据库中加载了对象,但也无法解决。我已经使用tail
验证对象已更改。
重新加载Rails控制台中的模型的最佳方法是什么?每次更改模型代码时都必须重新启动控制台吗?有没有一种方法可以仅转储所有现有模型及其代码而不重新加载控制台?
编辑:这变得更加奇怪了。我现在怀疑我的代码已经重新加载,但调试器并未反映出新代码。当我逐步执行代码时,旧代码会出现,但会执行新代码。我通过添加raise
进行了测试--raise
从未在调试器中显示,但确实被引发了。怎么回事?
是否需要在调试器中做些什么才能看到重新加载的代码?这看起来像一个bug...
ruby-debug-base19x
和ruby-debug19
-- 最近我在使用调试器和 linecache 时遇到了一些问题,所以它们可能都在那里。 - jcollum