dsp*_*099 7 ruby ruby-on-rails
标题说明了一切.
请注意,这与模型或初始化程序的更改无关.我可以在控制器中删除一个实例变量(比如@user),然后重新加载一个视图,它会起作用 - 直到我重新启动服务器,在这种情况下它会抱怨变量为nil.
我正常工作,然后切换到一组完全不同的控制器和视图,现在它正在无缘无故地发生.
该应用程序处于开发环境中.
development.rb内容:
Dashboard::Application.configure do
config.cache_classes = false
config.whiny_nils = true
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_mailer.raise_delivery_errors = false
config.active_support.deprecation = :log
config.action_dispatch.best_standards_support = :builtin
config.assets.compress = false
config.assets.debug = true
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能知道它是如何发生的以及如何解决它?
编辑: **它可能是相关的,但我似乎无法使用部分运行'rake routes'时存在的任何路径,例如dashboards_path**
情节扭曲: 添加
config.reload_classes_only_on_change = false
Run Code Online (Sandbox Code Playgroud)
发展.rb似乎改善了这个问题.我仍然想知道它为什么会发生,为什么它突然发生,为什么它发生在一个控制器而不是另一个控制器.
Rails 使用自动加载路径配置来确定要自动加载和重新加载的文件:
module YourApp
class Application < Rails::Application
config.autoload_paths += %W( #{config.root}/lib #{config.root}/lib/**/ #{config.root}/app/traits )
...
end
end
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我添加了一个自定义目录,即 app/traits 目录,其中存储了一些定义共享行为的模块。
如果您开始使用的控制器位于 Rails 未监视的子目录中,或者具有阻止 Rails 附加文件系统更改事件的权限,则会出现此问题。
“解决”问题的原因config.reload_classes_only_on_change = false是整个应用程序会根据每个请求重新加载,而不是依赖于检测文件的更改。
控制器很可能不在监视文件列表中,这就是为什么 Rails 不会在更改时重新加载它。它不在列表中的确切原因可能会有所不同,我需要有关应用程序的文件夹结构和配置的更多详细信息,然后才能在那里给出一个好的答案......