I am experiencing a problem similar to this question: Rails asset pipeline not including required files in application.js manifest However, that question was closed, so I am re-asking it, but with the specifics of my situation.)
Ruby 2.0.0, Rails 3.2.8, OSX 10.7.5, Chrome 28.0.1500.95
Files placed in "/app/assets/javascripts" do not appear to be compiling to or appearing in "/public/assets"
If I place a file such as this test.js file in app/assets/javascripts:
alert("Hello!");
and then reload a page in my app, this alert should appear. (I am replicating what Ryan Bates does in his Railscast on the Asset Pipeline at ~6:30 into the video) However, no alert appears.
Some tests I did to try to debug this.
// This is a manifest file that'll be compiled into application.js, which will include all the files // listed below. // // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. // // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // the compiled file. // removed /sitewide from require_tree // // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD // GO AFTER THE REQUIRES BELOW. // //= require jquery //= require jquery_ujs //= require_tree .
# Enable the asset pipeline config.assets.enabled = true
"/Users/Anders/Dropbox/dev/suggestion-box-app/app/assets/images", "/Users/Anders/Dropbox/dev/suggestion-box-app/app/assets/javascripts", "/Users/Anders/Dropbox/dev/suggestion-box-app/app/assets/stylesheets", "/Users/Anders/.rvm/gems/ruby-2.0.0-p195@suggestion-box-app/gems/coffee-rails-3.2.2/lib/assets/javascripts", "/Users/Anders/.rvm/gems/ruby-2.0.0-p195@suggestion-box-app/gems/jquery-rails-3.0.4/vendor/assets/javascripts"
!!! 5 %html %head %meta{:charset => "utf-8"}/ %meta{:content => "width=device-width", :name => "viewport"}/ %meta{:content => "yes", :name => "apple-mobile-web-app-capable"}/ %title My App %script{:type=>"text/javascript", :src=>"//use.typekit.net/wjb6ybj.js"} :javascript try{Typekit.load();}catch(e){} = stylesheet_link_tag "screen", :media => "all" = csrf_meta_tags = javascript_include_tag "application" %body #container = render "layouts/flashes" = yield = render "layouts/footer"
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <meta content='width=device-width' name='viewport'> <meta content='yes' name='apple-mobile-web-app-capable'> <title>My app</title> <script src='//use.typekit.net/wjb6ybj.js' type='text/javascript'></script> <script> try{Typekit.load();}catch(e){} </script> <link href="/assets/screen.css?body=1" media="all" rel="stylesheet" type="text/css" /> <meta content="authenticity_token" name="csrf-param" /> <meta content="FqMtH+rs6or9HRx+RL4bWpQyLTNPM8BKLrcf/xZknP8=" name="csrf-token" /> <script src="/assets/application.js?body=1" type="text/javascript"></script> </head> <body> <div id='container'> .... </div> </body> </html>
/*! * jQuery JavaScript Library v1.9.1 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2013-2-4 */ (function(e,t){function P(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:e.nodeType===1&&t?!0:n==="array"||n!=="function"&&(t===0||typeof t=="number"&&t>0&&t-1 in e)}function B(e){var t=H[e]={};return b.each(e.match(E)||[],function(e,n){t[n]=!0}),t}function I(e,n,r,i){if(!b.acceptData(e))return;var s,o,u=b.expando,a=typeof n=="string",f=e.nodeType,c=f?
[...remainder of jquery excluded]
Should I not see the test.js file here?
Any suggestions as to what the problem might be? Is there any additional info I can provide to help debug this issue? Thanks for any help!
To compile your assets locally, run the assets:precompile task locally on your app. Make sure to use the production environment so that the production version of your assets are generated. A public/assets directory will be created. Inside this directory you'll find a manifest.
The asset pipeline provides a framework to concatenate and minify or compress JavaScript and CSS assets. It also adds the ability to write these assets in other languages and pre-processors such as CoffeeScript, Sass, and ERB.
You won't find your JavaScript folder in the same place as you did in Rails 5. The directory structure for JavaScript has changed to the app/javascript/packs/ folder. In that folder you will find the application. js file, which is just like the application.
The problem appears to have been related to my rails/gem versions. After updating from Rails 3.2.8 to Rails 3.2.14 (which also required updating the rack gem from 1.4.1 to 1.4.5) the issue was resolved and items in assets/javascripts are now being compiled/added to public/assets. Note that I created a completely new gemset as part doing this, so the issue may have had nothing to do with the Rails version and simply was a questions of a "corrupted" gem set that needed to be re-created.
Rails will compile all the targets listed in config.assets.precompile
. These targets will be compiled to public/assets/
. That config item already includes "application.js"
and other some targets, so you need to add any other targets you want to be precompiled to public/assets/
. The source file to be compiled for any particular target are automatically computed based on the name of the target; e.g., a target of test.js
would be compiled from app/assets/javascripts/test.js
or from app/assets/javascripts/test.js.coffee
, whichever exists.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With