ruby-on-railsruby-on-rails-4freebsdruby-on-rails-4.2

Rails does not reload controllers, helpers on each request in FreeBSD 9.1


I've detected weird behavior of rails. Please give me some advice!

For example I have a code like this:

def new
  raise
end

I start rails server in development mode. Hit refresh in browser and see

RuntimeError in AuthenticationController#new

Okay. I comment out line with "raise" like this:

def
  # raise
end

Hit refresh in browser but again I see that error as shown above. Even though in browser I see code with commented out "raise".

My guess is that controllers and helpers etc. are getting reloaded but rails returns cached results.

config/environments/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

How I start server:

=> 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

Any suggestions please.

UPDATE 1. This problem does not exists in Ubuntu 14.04 but exists in FreeBSD 9.1.

I've created simple app and tested it out in FreeBSD first (same problem), in Ubuntu then (no problem).

Can you help me with advice how to deal with this problem on FreeBSD 9.1?


Solution

  • I have finally figured this out!

    Here's an answer on rails tracker: https://github.com/rails/rails/issues/16678

    If you use VirtualBox + NFS you must synchronize time between host and client due some changes in Rails 4.