Sebastien
Sebastien

Reputation: 6660

Rails doesn't serve assets with nginx in development mode

I work on a virtual machine in Debian 6. I have nginx in front to serve statics files ('jpg,png,css,js...) and apache to run script.

But i have a problem, My assets files make a 404 error.

My nginx configuration :

server {
  listen      80;
  server_name mysite ;

  #access_log  /var/log/nginx/access.mysite.log;
  #error_log   /var/log/nginx/error.mysite.log;


  # Les requêtes sont transmises au processus Apache écoutant en local sur le port 81
  location / {
    proxy_pass         http://127.0.0.1:81/;
    include  /etc/nginx/proxy.conf;
  }

  # On remap sur la racine du domaine
  if ($host != "mysite"){
        rewrite ^(.*)$ http://mysite$1 permanent;
        break;
      }

  # On distribue les fichiers statiques directement
  location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|srt|swf)$ {
    root  /home/php/mysite/public;
    #access_log  /var/log/nginx/access.mysite.log;
    #error_log   /var/log/nginx/error.mysite.log;
    expires           1d;
  }
}

And my apache configuration :

 <VirtualHost *>
        DocumentRoot /home/php/mysite/public
        ServerName mysite
        PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.9
        PassengerRuby /usr/local/bin/ruby
        RailsEnv development
        #ServerAlias
        <Directory  /home/php/mysite/public>

                #Conf Standard
                 AllowOverride All
                 Order allow,deny
                 Allow from all

        </Directory>
        TransferLog /dev/null
</VirtualHost>

My development.ru

  MySite::Application.configure do
    # Settings specified here will take precedence over those in config/application.rb

    # In the development environment your application's code is reloaded on
    # every request.  This slows down response time but is perfect for development
    # since you don't have to restart the web server when you make code changes.
    config.cache_classes = false

    # Log error messages when you accidentally call methods on nil.
    config.whiny_nils = true

    # Show full error reports and disable caching
    config.consider_all_requests_local       = true
    config.action_controller.perform_caching = false

    # Don't care if the mailer can't send
    config.action_mailer.raise_delivery_errors = false

    # Print deprecation notices to the Rails logger
    config.active_support.deprecation = :log

    # Only use best-standards-support built into browsers
    config.action_dispatch.best_standards_support = :builtin

    # Do not compress assets
    config.assets.compress = false

    # Expands the lines which load the assets
    config.assets.debug = true

  end

I use rails 3.1.1 with passenger. I thin it's really a nginx problem because when i go to http://mysite:81 (so on apache directly), everything work fine.

Thank you for help.

Upvotes: 3

Views: 2260

Answers (1)

Sebastien
Sebastien

Reputation: 6660

My problem was about this in my nginx configuration

# On distribue les fichiers statiques directement
  location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|srt|swf)$ {
  root  /home/php/mysite/public;
  #access_log  /var/log/nginx/access.mysite.log;
  #error_log   /var/log/nginx/error.mysite.log;
  expires           1d;
}

So i remove it, it disables nginx to serve static file but it's not very usefull in development mode.

Thank you for help.

Upvotes: 8

Related Questions