Problem
I have a Rails 3.0.4 app which I upgrade to 3.1.4 following instructions from Railscast video: "Upgrading to rails 3.1".
Now I have problems with assets because they are not resolved, giving messages in server log like this:
Started GET "/assets/application.css" for 127.0.0.1 at 2012-04-08 03:57:13 -0500
Served asset /application.css - 404 Not Found (15ms)
ActionController::RoutingError (No route matches [GET] "/assets/application.css"):
Rendered /usr/local/rvm/gems/ruby-1.9.2-p318/gems/actionpack-3.1.4/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (14.3ms)
Started GET "/assets/application.js" for 127.0.0.1 at 2012-04-08 03:57:13 -0500
Served asset /application.js - 404 Not Found (35ms)
ActionController::RoutingError (No route matches [GET] "/assets/application.js"):
These files are in assets
directory:
$ ls app/assets/*/application*
app/assets/javascripts/application.js app/assets/stylesheets/application.css
and contains this:
$ cat app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require_self
//= require_tree .
$ cat app/assets/stylesheets/application.css
/*
*= require_self
*= require_tree .
*/
I suppose everything is configured. Here I put some chunks of files:
Gemfile
, contains assets gems required:
group :assets do
gem 'sass-rails', '~> 3.1.3'
gem 'coffee-rails', '~> 3.1.0'
gem 'uglifier'
end
application.rb
, has assets enabled:
config.assets.enabled = true
config.assets.version = '1.0'
development.rb
:
config.assets.compress = false
config.assets.debug = true
finally... application.html.erb
layout:
<%= stylesheet_link_tag 'application' %>
<%= javascript_include_tag 'application' %>
Stage
I am now in development environment.
Tests
If I request http://localhost:3000/assets/images/rails.png
, it throws No route matches [GET] "/assets/images/rails.png"
, but file is there:
$ ls app/assets/images/rails.png
app/assets/images/rails.png
Then I execute rake assets:precompile
:
$ bundle exec rake assets:precompile
/usr/local/rvm/rubies/ruby-1.9.2-p318/bin/ruby /usr/local/rvm/gems/ruby-1.9.2-p318/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
/usr/local/rvm/rubies/ruby-1.9.2-p318/bin/ruby /usr/local/rvm/gems/ruby-1.9.2-p318/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets
Then, execute server (rails s
) and request again an image (rails.png
):
$ rails s
=> Booting WEBrick
=> Rails 3.1.4 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
/usr/local/rvm/gems/ruby-1.9.2-p318/gems/actionpack-3.1.4/lib/action_dispatch/http/mime_type.rb:101: warning: already initialized constant PDF
[2012-04-08 04:53:06] INFO WEBrick 1.3.1
[2012-04-08 04:53:06] INFO ruby 1.9.2 (2012-02-14) [i686-linux]
[2012-04-08 04:53:06] INFO WEBrick::HTTPServer#start: pid=16702 port=3000
Started GET "/assets/images/rails.png" for 127.0.0.1 at 2012-04-08 04:53:14 -0500
Served asset /images/rails.png - 404 Not Found (38ms)
ActionController::RoutingError (No route matches [GET] "/assets/images/rails.png"):
Rendered /usr/local/rvm/gems/ruby-1.9.2-p318/gems/actionpack-3.1.4/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (125.2ms)
So What's wrong?, Am I doing something wrong?
As far as I know all precompiled assets are moved to the assets folder.
That means the content of javascript, stylesheets AND images will be combined in localhost:3000/assets
.
So if you search for
localhost:3000/assets/images/rails.png
it should be located in
app/assets/images/images/rails.png
.
Therefor the 404.
To keep your directory clean I suggest to keep all your images in app/assets/images/ and point to them with asset_path('rails.png')
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