Rails不会在FreeBSD 9.1中的每个请求上重新加载控制器,助手

Kes*_*nov 9 freebsd ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.2

我已经检测到铁轨的奇怪行为.请给我一些建议!

例如,我有一个这样的代码:

def new
  raise
end
Run Code Online (Sandbox Code Playgroud)

我在开发模式下启动rails服务器.在浏览器中点击刷新并查看

AuthenticationController中的RuntimeError #new

好的.我像这样注意出"加注":

def
  # raise
end
Run Code Online (Sandbox Code Playgroud)

在浏览器中点击刷新,但我再次看到如上所示的错误.即使在浏览器中我看到代码注释掉"加注".

我的猜测是控制器和帮助器等正在重新加载,但rails返回缓存结果.

配置/环境/ development.rb:

Rails.application.configure do
  # BetterErrors::Middleware.allow_ip! '192.168.78.0/16'

  # 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

  # Do not eager load code on boot.
  config.eager_load = false

  # 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

  # Raise an error on page load if there are pending migrations.
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = true

  # Adds additional error checking when serving assets at runtime.
  # Checks for improperly declared sprockets dependencies.
  # Raises helpful error messages.
  config.assets.raise_runtime_errors = false

  # Raises error for missing translations
  # config.action_view.raise_on_missing_translations = true
end
Run Code Online (Sandbox Code Playgroud)

我如何启动服务器:

=> Booting Puma
=> Rails 4.2.1.rc3 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma 2.11.1 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:3000
Run Code Online (Sandbox Code Playgroud)

请给我任何建议.

更新1. 此问题在Ubuntu 14.04中不存在,但存在于FreeBSD 9.1中.

我已经创建了简单的应用程序并在FreeBSD中首先测试了它(同样的问题),然后在Ubuntu中测试(没问题).

你能帮我提一下如何在FreeBSD 9.1上解决这个问题吗?

Dan*_*nyB 15

与Rails 5 + Vagrant + Ubuntu 16相同的问题.上述解决方案均无效(我的访客和主机时间已同步).

唯一对我有用的是评论下面的一行 config/environments/development.rb

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

以为我会发布这个以防其他人到达此页面以获得类似问题,就像我做的那样.


Kes*_*nov 5

我终于想通了!

这是 Rails 跟踪器的答案:https : //github.com/rails/rails/issues/16678

如果您使用 VirtualBox + NFS,由于 Rails 4 中的一些更改,您必须在主机和客户端之间同步时间。