Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 323
Kesha Antonov Avatar asked Mar 05 '15 13:03

Kesha Antonov


People also ask

How do I add helpers to my Rails controllers?

By default, each controller will include all helpers. These helpers are only accessible on the controller through #helpers In previous versions of Rails the controller will include a helper which matches the name of the controller, e.g., MyController will automatically include MyHelper. You can revert to the old behavior with the following:

Can I use helpers outside of views in rails?

If you want to use helpers outside of views you’ll need something else. It’s possible, although not very common, to use helper methods from controller actions. Before Rails 5, you had to include the helper module. In newer versions, you can use helpers in your controller with the helpers (plural) object.

What is autoloading in Ruby on rails?

Rails automatically reloads classes and modules if application files change. More precisely, if the web server is running and application files have been modified, Rails unloads all autoloaded constants just before the next request is processed.

Is there a file Watcher in a rails console session?

In a Rails console there is no file watcher active regardless of the value of config.cache_classes. This is so because, normally, it would be confusing to have code reloaded in the middle of a console session, the same way you generally want an individual request to be served by a consistent, non-changing set of application classes and modules.


3 Answers

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.

like image 86
DannyB Avatar answered Oct 25 '22 05:10

DannyB


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.

like image 44
Kesha Antonov Avatar answered Oct 25 '22 05:10

Kesha Antonov


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.

like image 45
Rafael Martinez Avatar answered Oct 25 '22 04:10

Rafael Martinez