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

4

13

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?

Chukar answered 5/3, 2015 at 13:21 Comment(2)
Posted on rails tracker as an issue: github.com/rails/rails/issues/19277Chukar
Okay. I figured this out. It was NFS problem. I do not know what config options must be set but if I work with local app everything is ok.Chukar
C
5

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.

Chukar answered 12/3, 2015 at 11:0 Comment(0)
T
19

Had the same issue with Rails 5 + Vagrant + Ubuntu 16. None of the other solutions worked (my guest and host times are synced).

The only thing that worked for me was to comment out the following line from config/environments/development.rb:

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

Thought I would post this in case someone else gets to this page for a similar issue, as I did.

Towny answered 21/9, 2016 at 13:56 Comment(5)
same problem, i also remove gem listen from gemfileHorror
Same setup, and my vagrant/mac time was already in sync, so the accepted solution did not help. But THIS one did, thanks!Smudge
Rails 5 causes several issues for Vagrant users, and the Rails team does not consider this a problem, as indicated in this ticket - maybe if more people complain about vagrant related issues, the team will understand it is not an obscure way of development.Towny
This was my fix too although, I'm not on vagrant. I'm using native docker beta on OS X (as of 6/27/17) and all of my rails 4.x apps work w/ this setup except this new app I started on rails 5. Commented out the EventedFileUpdateChecker from my dev config and it's working now.Heyer
I think disabling this 'feature' has fixed an issue I was having on Docker OS X as well, where I would update code in a controller but the change wasn't registered so I would have to completely restart the docker container for my new controller code to run. Very frustrating. So far it's working well. If this resolves the issue it is a huge helpThermos
C
5

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.

Chukar answered 12/3, 2015 at 11:0 Comment(0)
P
3

Please check if you are really running the application in development mode, rather than production.

Also check you /config/environments/development.rb to see if cache classes is off:

config.cache_classes = false

This other post might help you.

Phylloquinone answered 5/3, 2015 at 13:35 Comment(2)
Hey, Rafael! Thanks for the reply. I've updated my question with development.rb and proof that I use development mode of server.Chukar
Thanks man - this saved me when several other answers did not!!Udelle
C
0
Rails.application.reloader.reload!

found with method(:reload!).source in rails console.

(rails 6)

Complete answered 15/4, 2019 at 14:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.