1

I'm using apache 2.2.15 passenger 5.1.2 rails 4.2.6 ruby 2.3.3

In the rails log, I get

(No route matches [GET] application-xxxxx.js

as well as

(No route matches [GET] application-xxxxx.css

I can find the assets in the public/assets directory.

My manifests:

app/assets/stylesheets/application.css.less:

/*
 *= require jquery-ui
 *= require font-awesome
 *= require bootstrap_and_overrides
 *= require awesome-bootstrap-checkbox
 *= require lists
 *= require mailgroups
 *= require general
 *= require colors
 *= require print
 *= require loader
 *= require tooltips
 *= require_self
 *= require_tree .
*/

app/assets/javascripts/application.js

//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require jquery-ui
//= require twitter/bootstrap
//= require bootstrap
//= require turbolinks
//= require twitter/bootstrap/rails/confirm
//= require_self
//= require_tree .

and I set (following other answers here on SO) in config/production.rb

config.serve_static_files = true

in app/views/layouts/application.html.erb

<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => "reload" %>
<%= javascript_include_tag "application", "data-turbolinks-track" => "reload" %>

I'm lost, thanks for your help.

UPDATE: I don't use Capistrano, just deploying manually.

When running Rails.application.config.assets.paths in the rails console, I get the following:

 => ["/var/www/myappname/app/assets/fonts",
 "/var/www/myappname/app/assets/images",
 "/var/www/myappname/app/assets/javascripts",
 "/var/www/myappname/app/assets/stylesheets",
 "/var/www/myappname/vendor/assets/fonts",
 "/var/www/myappname/vendor/assets/images",
 "/var/www/myappname/vendor/assets/javascripts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-confirm-1.0.6/vendor/assets/javascripts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/local_time-1.0.3/app/assets/javascripts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/font-awesome-rails-4.7.0.1/app/assets/fonts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/font-awesome-rails-4.7.0.1/app/assets/stylesheets",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-fontawesome-0.5.1/vendor/assets/fonts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-fontawesome-0.5.1/vendor/assets/stylesheets",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-bootstrap-3.3.5.0/app/assets/fonts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-bootstrap-3.3.5.0/app/assets/javascripts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-bootstrap-3.3.5.0/app/assets/stylesheets",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/app/assets/fonts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/app/assets/images",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/app/assets/javascripts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/app/assets/stylesheets",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/vendor/assets/stylesheets",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-turbolinks-2.1.0/vendor/assets/javascripts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-ui-rails-6.0.1/app/assets/images",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-ui-rails-6.0.1/app/assets/javascripts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-ui-rails-6.0.1/app/assets/stylesheets",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-rails-4.2.2/vendor/assets/javascripts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/coffee-rails-4.0.1/lib/assets/javascripts",
 "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/turbolinks-source-5.0.0/lib/assets/javascripts",
 #<Pathname:/var/www/myappname/app/assets/fonts>,
 #<Pathname:/var/www/myappname/app/views>,
 #<Pathname:/var/www/myappname/app/assets/stylesheets>,
 #<Pathname:/var/www/myappname/app/assets/javascripts>]

my config/initializers/assets.rb already contains this:

Rails.application.config.assets.precompile += ['.svg', '*.eot', '*.woff', '*.woff2', '*.ttf', '*.otf', '*.js', '*.css']
Phipsen
  • 159
  • 3
  • 15

1 Answers1

2

this is my advise.

I add the following resources that may help in finding a solution.

https://launchschool.com/blog/rails-asset-pipeline-best-practices

https://railsapps.github.io/rails-javascript-include-external.html

https://reinteractive.com/posts/116-12-tips-for-the-rails-asset-pipeline

I read all the guides that can be found by searching rails asset pipeline, but I will not link them all

My advice is to check the fingerprint of the application.css and application.js both with the Chrome Developer Tools (by going in any screen element, opening the developer toolbox with f12 and checking any style of any div or any js file). You will need to check which fingerprint version of the file is used, then open that version with the text editor and check what is loaded in the fingerprint version of the file.

If your file (for ex. user.js) is loaded at the bottom of the manifest, you should easily find it at the bottom of your fingerprinted application.js.

If you want to update this file you can run

rake assets:precompile

This will precompile assets only in development, for production you need to specify the environment. It will change that fingerprinted file application.css and application.js with the editing you have done.

RAILS_ENV=production bundle exec rake assets:precompile

You can also check the file at the following address localhost:3000/assets/yourjsfile.js or check the fingerprint version by following localhost:3000/assets/application-yourfingerprint.js

As you can see, many files are included in that public/assets folder, you can delete them with rake assets:clean or -rf public/assets and then run rake assets:precompile, it will precompile again assets.

If nothing is included, then your application.js is not being loaded. You may try the following as I read on different posts:

  1. Include the file in the config/initializers/assets.rb with the following line of code:

    Rails.application.config.assets.precompile += %w( user.js )
    
  2. Start the rails c and run Rails.application.config.assets.paths This command will show in red the paths that are automatically included, for example those inside App, Lib and Vendor, in green those that you included by adding inside config/application.rb the follwing code to add new path

    config.assets.paths << Rails.root.join("vendor","assets", "fonts")
    

Another error i made in the past was not using the correct sprockets syntax, you can check it at the following link ( i was using require_user instead of require user):

https://github.com/rails/sprockets#sprockets-directives

Another problem was that I had under App/assets/javascript two files named user (user.coffee and user.js). The first to be loaded was user.coffee which was empty.

Fabrizio Bertoglio
  • 5,890
  • 4
  • 16
  • 57
  • Thanks Fabrizio for your extensive explanation. I read this links, I realized that I'm still confused whether using sprockets or javascript_include_tag / stylesheet_include_tag or config.assets.paths << Rails.root.join('app', 'assets', 'fonts') or even Rails.application.config.assets.precompile += %w( xxxx.js ) – Phipsen Mar 16 '17 at 07:43
  • @Phipsen There is more documentation online, but as my understanding you should run in your rails console `Rails.application.config.assets.paths`, so you will know if you need to add a new folder with the `config.assets.paths << Rails.root.join('app', 'assets', 'fonts')`. The `Rails.application.config.assets.precompile += %w( xxxx.js )` is for static assets or for the Manifest file (as my understanding), but I am not sure about the last point. Do you have your website in production and could you share the link? Thanks – Fabrizio Bertoglio Mar 16 '17 at 07:46
  • @Phipsen As your problem is the error message `failed GET request with application-xxxxx.js`, we are talking of fingerprinted file, this is not the case. The problem is not that rails is not finding your assets in your app/assets/ folders, but that rails is not finding you application-xxx.js in your `public/assets` folder or it is not finding that specific file with that fingerprint, or it is not finding that file in production. If the problem is production you need to precompile development, production and perform `git add . ` plus `git commit` plus `git push heroku master` – Fabrizio Bertoglio Mar 16 '17 at 08:25
  • @Phipsen Thanks a lot for accepting my answer. So this did work? Because I will include it in my final answer so that we can cover all the scenarios for future issue! Bye Fabrizio – Fabrizio Bertoglio Mar 16 '17 at 13:56
  • The solution was actually a bit of everything you described in your post: 1. I read the links which clarfied a lot about my confusion 2. I entered your hints in `config/initializers/assets.rb` 3. I added `<% javascript_include_tag 'xxxx.js' %>` for controller specific assets. – Phipsen Mar 18 '17 at 22:41
  • I guess I know that actually all 3 'includes' are important: - the sprockets in the manifests (application.js / application.css) - the precompile and paths directives in `config/initializers/assets.rb` - the `javascript_include_tag` for controller specific assets. Thanks Fabrizio for completing your answer and salutti dai Berna a Torino. – Phipsen Mar 18 '17 at 22:55
  • @Phipsen Vielen Dank, Ich freue mich dass Sie die Losung gefunden haben. Mit freundliche Grüße Fabrizio Bertoglio – Fabrizio Bertoglio Mar 19 '17 at 08:54