要重现这一点,您需要在全新的rails dir中使用两个文件:
# config/initializers/test.rb
load Rails.root.join 'lib', 'test.rb'
和
# lib/test.rb
module Test
# BLA ||= "Oh nooooooooooooooo!"
BLA ||= "Oh Yeeeeeeeeeeeeeeees!"
end
然后使用rails c
启动rails控制台会话并键入Test::BLA
irb(main):001:0> Test::BLA
=> "Oh Yeeeeeeeeeeeeeeees!"
像这样编辑测试模块:
# lib/test.rb
module Test
BLA ||= "Oh nooooooooooooooo!"
# BLA ||= "Oh Yeeeeeeeeeeeeeeees!"
end
重启控制台:
irb(main):001:0> Test::BLA
=> "Oh Yeeeeeeeeeeeeeeees!"
这绝对令人讨厌。
摆脱旧状态并真正干净地重新启动rails控制台的唯一方法是关闭已运行rails c
的所有 shell会话。 - 是的,它具有传染性。
TF存储在哪个/如何存储状态?
答案 0 :(得分:0)
这是Rails 4发生重大变化的结果,对于性能问题,Rails实例保持打开状态,因此您可以在第一次加载后非常快速地加载环境。
然而,常量应该是常量,在应用程序的任何实例中定义一次。您应该通过使用等于而不是等于或等于定义常量来解决此问题(与其他属性不同,它应始终具有文件中的值。)
# lib/test.rb module Test BLA = "Oh crumbs!" end
如果这是您要设置和重新设置的值,请尝试模块属性
# lib/test.rb module Test mattr_accessor :bla end
然后您可以使用double @设置它,就像类变量一样。
或者,如果您将模块包含在课程中,请改用cattr_accessor
,使其成为该课程中的变量。
答案 1 :(得分:0)
后台运行了一些spring
进程。一个可能带来丑陋副作用的根本解决方案是:
killall ruby && rails c
但更好的方法是在gem 'spring'
中注释掉Gemfile
行。