user2772200
user2772200

Reputation: 13

rails fallback to assets pipeline

I'm trying to deploy a rails4 (ruby-2.0.0) app to my server. Almost all of my assets are precompiled, and served by nginx.

One js.erb, generates a dynamic html-list, by getting models from my database. This asset can't be precompiled, because it must remain dynamic.

I'm excluding this asset from asset.precompile, and turned on

config.assets.compile = true

to fall back to the asset pipeline, for this one asset.

In my local production env, everthing is working, but on my server (nginx, unicorn) the asset pipeline fall back won't work. I get a simple 404 Error

nginx error log:

 2013/09/13 08:54:54 [error] 27442#0: *58 open() "/XXX/current/public/assets/rails_admin/rails_admin_switchable-051203ae1d7aca2c08092e5c92bcdf15.js" failed (2: No such file or directory), client: XXX, server: , request: "GET /assets/rails_admin/rails_admin_switchable-051203ae1d7aca2c08092e5c92bcdf15.js HTTP/1.1", host: "XXX", referrer: "http://XXX/admin"

unicorn and rails don't show any errors.

Any ideas, how I can solve this?

best, Franz

Upvotes: 1

Views: 2648

Answers (1)

Winfield
Winfield

Reputation: 19145

It looks like your nginx server definition isn't properly integrated with your app server. It should be configured to pass a request that doesn't match a physical file on to the app server.

Here is a standard configuration for a rails app living in /app with nginx via a unicorn/UNIX-socket integration:

  upstream app_server {
    server unix:/tmp/nginx.socket fail_timeout=0;
   }

  server {
    listen <%= ENV["PORT"] %>;
    server_name _;
    keepalive_timeout 5;

    # path for static files
    root /app/public;

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://app_server;
    }

    # Rails error pages
    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /app/public;
    }
  }

If your asset pipeline compiles to /app/public/assets you should be good to go.

Upvotes: 2

Related Questions