Rails 3.2.11突然需要重启才能“确认”控制器中的任何变化?

时间:2013-01-12 18:14:00

标签: ruby-on-rails ruby

标题说明了一切。

请注意,对于模型或初始值设定项的更改,。 我可以在控制器中删除一个实例变量(比如@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

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

修改 **它可能是相关的,但我似乎无法使用在部分运行'rake routes'时存在的任何路径,例如dashboards_path **

情节扭曲: 添加

config.reload_classes_only_on_change = false
发展.rb似乎改善了这个问题。我仍然想知道它为什么会发生,为什么它突然发生,为什么它发生在一个控制器而不是另一个控制器。

1 个答案:

答案 0 :(得分: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不会在更改时重新加载它。它不在列表中的确切原因可能会有所不同,我需要有关应用程序的文件夹结构和配置的更多详细信息才能在那里给出一个好的答案...