rtacconi
rtacconi

Reputation: 14769

Javascript file is not updated in development with Rails

I changed a JS file under app/assets/javascripts but it is still the same. I deleted the file and re-created but the content is still the old one. This is my development.rb file:

App::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  config.serve_static_assets = false

  # 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

  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = true

  config.action_mailer.delivery_method = :letter_opener

  config.action_mailer.default_url_options = { :host => "lvh.me:3000" }

  # 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

  config.log_tags = [:uuid, :remote_ip]
end

The JS file is loaded inside the header tag with this code:

<script src="/assets/deals.js?body=1" type="text/javascript"></script>

which is the normal way JS is loaded in development

Upvotes: 21

Views: 10072

Answers (8)

Mitch Callahan
Mitch Callahan

Reputation: 1

If the issue is still persisting after trying the above answers, add this snippet to config/environments/development.rb in your project: config.assets.debug = true. It will enable debug mode for assets to prevent concatenation and preprocessing.

After adding this, I didn't need to restart my server every time I made changes to asset files in my rails project. The changes would show immediately upon page reload.

Hope this helps!

Upvotes: 0

mahi-man
mahi-man

Reputation: 4676

Another unlikely cause is having the following config in development:

config.cache_classes = true

Although it is not the intention of the setting, it can stop modules from reloading and therefore stop the js bundle from updating without restarting the rails server as they have all been cached

Upvotes: 1

msuliq
msuliq

Reputation: 230

I have similar issue in my app running Rails 6 and 7. When I add console.log into one of the javascript controllers there won't be any log in the browser console, and it looks like the console.log is not even there.

I have been having issue for quite some time and have not been able to pinpoint the exact reason, it might be due to bundler installed globally, conflict between rvm and asdf, config for overmind, yarn or npm. But I found the 3 commands that resolve this problem for some time and I usually run them one after another

rails assets:clobber
rake tmp:cache:clear
rake assets:precompile

Upvotes: 0

BenKoshy
BenKoshy

Reputation: 35585

Check for sprockets-rails gem

In my case I upgraded to Rails 7, and for some reason, the javascript files were not updated. Spent many hours trying to work out why.

I finally discovered the culprit - in my case - somehow, I had removed the sprockets-rails gem. I could have easily lost many months trying to figure this out.

Upvotes: 0

Daniel
Daniel

Reputation: 703

Or delete the public/assets folder, and restart the app

Upvotes: 0

LegaTux
LegaTux

Reputation: 63

bundle exec rake assets:clean and then bundle exec rake assets:precompile

Upvotes: 3

Cfrim
Cfrim

Reputation: 980

Try to delete the tmp folder and then restart the server - rails s. That will do it.

Upvotes: 15

Danyil Velichko
Danyil Velichko

Reputation: 251

Try to clear precompiled assets:

bundle exec rake assets:clean

Upvotes: 23

Related Questions