1

On my local machine running in production mode (ie, rails s -e production) using webrick, I've generated the css using RAILS_ENV=production bundle exec rake assets:precompile, which creates application-d2bcfd35ef1c0c30b7a7ca94e52c0cbd.css, which the layout file also references.

However when loading the page I get the error:

Started GET "/assets/application-d2bcfd35ef1c0c30b7a7ca94e52c0cbd.css" for 127.0.0.1 at 2011-11-02 10:12:55 +0000

AbstractController::ActionNotFound (The action 'application-d2bcfd35ef1c0c30b7a7ca94e52c0cbd' could not be found for AssetsController):
  actionpack (3.1.1) lib/abstract_controller/base.rb:116:in `process'
  actionpack (3.1.1) lib/abstract_controller/rendering.rb:45:in `process'
  actionpack (3.1.1) lib/action_controller/metal.rb:193:in `dispatch'
  actionpack (3.1.1) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
  actionpack (3.1.1) lib/action_controller/metal.rb:236:in `block in action'
  actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:65:in `call'
  actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:65:in `dispatch'
  actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:29:in `call'
  rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
  rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'
  rack-mount (0.8.3) lib/rack/mount/code_generation.rb:68:in `optimized_each'
  rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'
  rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'
  actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:532:in `call'
  newrelic_rpm (3.2.0) lib/new_relic/rack/browser_monitoring.rb:18:in `call'
  airbrake (3.0.4) lib/airbrake/rack.rb:27:in `call'
  sass (3.1.10) lib/sass/plugin/rack.rb:54:in `call'
  actionpack (3.1.1) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
  rack (1.3.5) lib/rack/etag.rb:23:in `call'
  rack (1.3.5) lib/rack/conditionalget.rb:25:in `call'
  actionpack (3.1.1) lib/action_dispatch/middleware/head.rb:14:in `call'
  actionpack (3.1.1) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
  actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:243:in `call'
  rack (1.3.5) lib/rack/session/abstract/id.rb:195:in `context'
  rack (1.3.5) lib/rack/session/abstract/id.rb:190:in `call'
  actionpack (3.1.1) lib/action_dispatch/middleware/cookies.rb:331:in `call'
  activerecord (3.1.1) lib/active_record/query_cache.rb:62:in `call'
  activerecord (3.1.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:477:in `call'
  actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
  activesupport (3.1.1) lib/active_support/callbacks.rb:392:in `_run_call_callbacks'
  activesupport (3.1.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:28:in `call'
  rack (1.3.5) lib/rack/sendfile.rb:101:in `call'
  actionpack (3.1.1) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
  actionpack (3.1.1) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
  railties (3.1.1) lib/rails/rack/logger.rb:13:in `call'
  rack (1.3.5) lib/rack/methodoverride.rb:24:in `call'
  rack (1.3.5) lib/rack/runtime.rb:17:in `call'
  activesupport (3.1.1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.3.5) lib/rack/lock.rb:15:in `call'
  rack-cache (1.1) lib/rack/cache/context.rb:132:in `forward'
  rack-cache (1.1) lib/rack/cache/context.rb:241:in `fetch'
  rack-cache (1.1) lib/rack/cache/context.rb:181:in `lookup'
  rack-cache (1.1) lib/rack/cache/context.rb:65:in `call!'
  rack-cache (1.1) lib/rack/cache/context.rb:50:in `call'
  airbrake (3.0.4) lib/airbrake/user_informer.rb:12:in `call'
  railties (3.1.1) lib/rails/engine.rb:456:in `call'
  railties (3.1.1) lib/rails/rack/content_length.rb:16:in `call'
  railties (3.1.1) lib/rails/rack/log_tailer.rb:14:in `call'
  rack (1.3.5) lib/rack/handler/webrick.rb:59:in `service'
  /Users/ttt/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
  /Users/ttt/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
  /Users/ttt/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'

I read in the configuring rails guide:

  • config.serve_static_assets configures Rails itself to serve static assets. Defaults to true, but in the production environment is turned off as the server software (e.g. Nginx or Apache) used to run the application should serve static assets instead. Unlike the default setting set this to true when running (absolutely not recommended!) or testing your app in production mode using WEBrick. Otherwise you won´t be able use page caching and requests for files that exist regularly under the public directory will anyway hit your Rails app.

So changing config.serve_static_assets to true for production.rb references the files correctly. Is there a way of configuring webrick to serve asset pipeline files? Or is there any other rails server that is easy to set up for my development machine to run in production mode?

I'm running on Mac OS 10.6 (Snow Leopard) with an Apache web server.

zlog
  • 3,316
  • 4
  • 42
  • 82
  • Why do you want to precompile your assets in development environment? – Marek Tihkan Nov 02 '11 at 10:47
  • Could you be more specific when exactly the error happened: when running in development mode locally, when running in production mode locally or when running in production mode on the server? Could you add (to the question) the information on which machine (Linux, Windows, ...) in which context (Apache, Nginx, ...) you want to run the application in production mode? – mliebelt Nov 02 '11 at 11:17
  • @MarekTihkan - I want to precompile my assets on my local machine so I can set up a production environment without having to actually deploy to production – zlog Nov 02 '11 at 11:56
  • @mliebelt - I'm trying to set up a production environment on my local machine. I've updated the question with this information. – zlog Nov 02 '11 at 11:56

1 Answers1

1

You could clone your production environment for Vagrant (RailsCasts episode), which would make production enviorment testing on development machine more realistic.

or

You could create new environment for testing production settings and mark config.serve_static_assets to true.

or

You could try to use other servers like thin...

Probably the first one would give you most precise result how it would work on production and you would not use Webrick nor Thin in production.

Marek Tihkan
  • 1,914
  • 13
  • 11