每次进行更改时Rails Server都需要重启?为什么?

Ami*_*rma 41 ruby-on-rails

每次我更改控制器或模型中的任何内容时,我都必须重新启动服务器才能使其生效.但情况并非总是如此,以前它曾经正常工作,当我改变了什么,但我不知道现在发生什么事 ?

我的Rails版本是3.2.11

在我的开发环境文件中,我设置了config.cache_classes = false.

请帮忙..

我的development.rb文件如下

Testapp::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Log error messages when you accidentally call methods on nil.
  config.whiny_nils = true

  # Show full error reports and disable caching
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger
  config.active_support.deprecation = :log

  # Only use best-standards-support built into browsers
  config.action_dispatch.best_standards_support = :builtin

  # Raise exception on mass assignment protection for Active Record models
  config.active_record.mass_assignment_sanitizer = :strict

  # Log the query plan for queries taking more than this (works
  # with SQLite, MySQL, and PostgreSQL)
  config.active_record.auto_explain_threshold_in_seconds = 0.5

  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = true

  config.action_mailer.default_url_options = { :host => 'localhost:3000' }

end
Run Code Online (Sandbox Code Playgroud)

Ami*_*rma 59

我有答案..

在我的config/environments/development.rb文件中添加以下行后,我的问题已经解决.

config.reload_classes_only_on_change = false
Run Code Online (Sandbox Code Playgroud)


jay*_*esh 9

在控制台中使用以下命令启动服务器

rails server -e development
Run Code Online (Sandbox Code Playgroud)

如果没有启动,则提供您的rails版本以及您用于运行轨道应用程序的服务器.

更多配置

将您的config/environments/development.rb文件修改为:

config.serve_static_assets = false
Run Code Online (Sandbox Code Playgroud)


小智 6

另一个可能出现这种情况的情况是在虚拟化环境中,文件正在主机操作系统上编辑,而客户操作系统的文件事件管理器不会为文件更改生成事件。

这种情况的解决方案是注释掉以下行config/environments/development.rb

# Use an evented file watcher to asynchronously detect changes in source code,
# routes, locales, etc. This feature depends on the listen gem.
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
Run Code Online (Sandbox Code Playgroud)

因此给出:

# Use an evented file watcher to asynchronously detect changes in source code,
# routes, locales, etc. This feature depends on the listen gem.
# config.file_watcher = ActiveSupport::EventedFileUpdateChecker
Run Code Online (Sandbox Code Playgroud)

这会强制 rails 实际检查文件修改时间,而不是期望获取文件系统事件。


Bea*_*uty 5

VirtualBox用户有一个很好的说明,由用户Ninjaxor发布评论:

对于Vagrant /虚拟盒子用户来说,如果主机时钟和访客时钟不同步,就会出现一个错误,它会导致rails的重新加载. https://github.com/rails/rails/issues/16678

Vagrantfile您在如下目录中找到的文件: .../ruby/gems/sass-3.4.22/vendor/listen

在那里你必须添加这个:

# Sync time every 5 seconds so code reloads properly
config.vm.provider :virtualbox do |v|
  v.customize ["guestproperty", "set", :id, "--timesync-threshold", 5000]
end
Run Code Online (Sandbox Code Playgroud)

感谢GitHub上的用户axsuul!