7

标题说明了一切。

请注意,这与模型或初始化程序的更改无关。我可以删除控制器中的一个实例变量(比如@user),然后重新加载一个视图,它就会工作——直到我重新启动服务器,在这种情况下它会抱怨变量为零。

我工作正常,然后切换到一组完全不同的控制器和视图上工作,现在它无缘无故地发生了。

该应用程序位于开发环境中。

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

我怎样才能知道它是如何发生的以及如何解决它?

编辑: **这可能是相关的,但我似乎无法使用在部分运行“rake routes”时存在的任何路径,例如dashboards_path**

情节扭曲: 添加

config.reload_classes_only_on_change = false

到 development.rb 似乎已经改善了这个问题。我仍然想知道为什么会发生这种情况,为什么会突然发生,以及为什么会发生在一个控制器上而不是另一个控制器上。

4

1 回答 1

1

Rails 使用自动加载路径配置来确定要自动加载和重新加载的文件:

module YourApp
  class Application < Rails::Application
    config.autoload_paths += %W( #{config.root}/lib #{config.root}/lib/**/ #{config.root}/app/traits )

    ...

  end
end

如您所见,我添加了一个自定义目录,即 app/traits 目录,其中存储了一些定义共享行为的模块。

如果您开始使用的控制器位于不受 rails 监视的子目录中,或者具有阻止 rails 附加文件系统更改事件的权限,您会遇到此问题。

“解决”问题的原因config.reload_classes_only_on_change = false是整个应用程序在每次请求时都会重新加载,而不是依赖于检测文件的更改。

控制器很可能不在监视文件列表中,这就是为什么 rails 不会在更改时重新加载它。它不在列表中的确切原因可能会有所不同,我需要有关应用程序的文件夹结构和配置的更多详细信息,然后才能在那里给出一个好的答案......

于 2013-02-06T11:13:34.603 回答