【问题标题】:What are reasons "reload!" doesn't always seem to work in the Rails console?“重新加载!”的原因是什么?在 Rails 控制台中似乎并不总是有效?
【发布时间】:2012-06-29 10:58:43
【问题描述】:

我刚刚掌握了 Rails 控制台的窍门,并发现它对于在我的课程中快速测试方法很有用。我知道我可以更改我的模型,然后

> reload!

获取这些更新,但有时我会发现它似乎没有重新加载我的最新代码。 Rails 是否在某处缓存代码?

在一个非常简单的伪示例中,我可能在第 100 行有错误的代码:

100: u = User.alll

在 Rails 控制台中,当我运行此方法时,我可能会收到类似于以下内容的错误:

NoMethodError: undefined method `alll' for User:Class ... on line 100

然后修改我的代码,修复错误

100: u = User.all

然后重新加载:

> reload!

然后,当调用这个类中具有正确代码的方法时,它仍然会说

NoMethodError: undefined method `alll' for User:Class ... on line 100

当清楚时,错误已修复,违规行甚至不再位于第 100 行。有没有办法强制/硬重置“重新加载!”命令?

【问题讨论】:

    标签: ruby-on-rails console


    【解决方案1】:

    我的猜测是你正在做类似的事情:

    1. 创建User 的实例
    2. 在实例上调用someMethod
    3. 您遇到错误,然后去修复它
    4. reload!
    5. 你在现有实例上调用someMethod又得到错误

    因此,您正在调用本身尚未重新加载的实例上的方法。它的类已被重新加载,但实例已经在内存中 - 有错误等等。

    这至少是我的猜测(不是 100% 肯定)。

    要点是,如果您在reload! 之后创建一个新实例并在该新实例上调用您的方法,它应该停止抱怨。

    【讨论】:

    • 是的,这正是问题所在。您创建的实例不会“重新加载”。在 reload!-ing 和重新实例化之后,每次都运行良好。谢谢@flambino
    猜你喜欢
    • 2011-07-22
    • 2011-11-15
    • 2019-11-19
    • 2020-06-17
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多