【问题标题】:Rails Server needs restart every time I make changes? why?每次进行更改时,Rails Server 都需要重新启动吗?为什么?
【发布时间】:2013-08-16 10:13:57
【问题描述】:

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

我的 Rails 版本是 3.2.11

在我的开发环境文件中,我有 set 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

【问题讨论】:

  • 您能否再次检查您是否在开发模式下运行?
  • 是的@HassanJaveed 是对的,它应该可以在不提供环境文件中的任何内容的情况下工作。每次重新加载是开发模式下的默认行为。
  • 您是否定期将项目推送到 git?如果是这样,请检查那里的更改-也许您不小心删除了文件或更改了某些内容而没有意识到...
  • 请发布您的完整环境文件,还有其他因素会影响重新加载行为,例如 config.threadsafe!。
  • 对于 Vagrant/ virtual box 用户来说,如果主机时钟和访客时钟不同步,它会破坏 rails 的重新加载器。 github.com/rails/rails/issues/16678

标签: ruby-on-rails


【解决方案1】:

我有答案了..

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

config.reload_classes_only_on_change = false

【讨论】:

  • 有人能说出使用这个有什么缺点吗?
  • Rails 在每次请求时加载该类。在生产中,您希望它尽可能快,因此通常配置 Rails 来缓存这些类。在开发中,您不太关心速度,因此通常禁用该缓存机制,因此文件中的每次更改都会在下一个请求中进行。这可以防止您每次想要测试更改时都必须重新启动服务器。
  • @BalajiRadhakrishnan 使用它时,我注意到偶尔 activeadmin 不会及时为浏览器加载它的类(或类似的东西),从而导致像 undefined method 'namespace' for nil:NilClass 这样的错误。刷新页面总能修复它。
【解决方案2】:

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

rails server -e development

如果未启动,请提供您的 rails 版本以及您用于运行 rails 应用程序的服务器。

更多配置

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

config.serve_static_assets = false

【讨论】:

  • 感谢您的回答,我已经尝试过上面的命令,但它对我不起作用。我的 Rails 版本是 3.2.11,我的应用程序使用 webrick 服务器。
  • 修改你的 config/environments/development.rb 文件为:config.serve_static_assets = false
  • 感谢您的回复,将 config.serve_static_assets = false 添加到我的 development.rb 文件后问题已解决。
  • 解决方案对我有用,但一个小时后同样的问题又出现了
【解决方案3】:

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

解决这种情况的方法是注释掉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

因此给予:

# 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

这迫使 Rails 实际检查文件修改时间,而不是期望获取文件系统事件。

【讨论】:

【解决方案4】:

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

对于 Vagrant/ virtual box 用户,如果主机时钟存在错误 和访客时钟不同步,它会破坏 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

感谢 GitHub 上的用户 axsuul!

【讨论】:

    【解决方案5】:

    我注意到设置

    config.cache_classes = false 
    

    这对我有什么影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 2020-06-10
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多