2016-01-23 13 views
13

Questa è una domanda AWS, sto usando la piattaforma Ruby 2.2 (Puma).Come posso fornire beni in/public che non fanno parte della pipeline di asset con puma/nginx?

Le mie risorse compilate (in/public/assets) vengono servite come previsto. Gli altri beni in/pubblici non vengono offerti (404).

Dove si configura? È un problema di nginx? o un problema di puma?

Oppure si tratta solo di un problema di immagine AWS?

Ecco un esempio dal vivo (robots.txt vanno serviti dalla radice): http://staging.us-west-2.elasticbeanstalk.com/public/robots.txt

E 'anche opportuno ricordare che l'immagine piattaforma predefinita passeggeri funziona out of the box.

+2

Ci può dare i nomi/posizioni delle altre attività nel 'public' dir? –

+0

Intendi 422.html, 500.html, favicon.ico? – chrisp

+1

Sì, stai dicendo che hai risorse nella directory pubblica che non verranno mostrate, ma alcune lo faranno. Per fare un confronto valido, ho bisogno di sapere cosa hai che non mostrerà –

risposta

4

Quindi, sto usando lo stesso ambiente e ho trovato la soluzione con un po 'di google-fu:

Con rotaie 4+, nel file:

/config/environments/production.rb 

si dovrebbe trovare il seguente linee nella parte superiore del file

# Disable serving static files from the `/public` folder by default since 
# Apache or NGINX already handles this. 
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? 

questo è tutto bene e dandy dal momento che stiamo utilizzando dei passeggeri (nginx o Apache), ma Puma non gestisce questo per noi :)

Per risolvere questo ...

Nella console AWS, vai al tuo cruscotto beanstalk elastico per il progetto in questione, e fare clic su 'Configurazione' sul menu a sinistra.

Ora fare clic sulla piccola icona di trasmissione nella casella intitolata 'del software di configurazione'

Ora si dovrebbe vedere un tavolo sotto 'Ambiente Properties', digitare 'RAILS_SERVE_STATIC_FILES' in un nuovo campo sotto 'Nome proprietà', quindi digitare 'true' (senza virgolette) nel campo del valore, premere apply.

Viola! Ora il tuo progetto sta servendo file statici :)

+6

Il server delle applicazioni non deve servire risorse statiche in produzione. È inefficiente per le richieste di file statici di raggiungere l'app Rails. http://guides.rubyonrails.org/configuring.html – thebenedict

4

Nel caso in cui aiuti qualcuno o qualcuno sappia come migliorarlo, ecco la configurazione di nginx che finalmente ha funzionato per me. In /.ebextensions/01_files.config:

files: 
    "/etc/nginx/conf.d/webapp_healthd.conf" : 
     mode: "000755" 
     owner: root 
     group: root 
     content: | 
      upstream my_app { 
       server unix:///var/run/puma/my_app.sock; 
      } 

      log_format healthd '$msec"$uri"' 
          '$status"$request_time"$upstream_response_time"' 
          '$http_x_forwarded_for'; 

      server { 
       listen 80; 
       server_name _ localhost; # need to listen to localhost for worker tier 
       root /var/app/current/public; 

       if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { 
       set $year $1; 
       set $month $2; 
       set $day $3; 
       set $hour $4; 
       } 

       access_log /var/log/nginx/access.log main; 
       access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; 

       try_files $uri/index.html $uri @my_app; 

       location @my_app { 
       proxy_pass http://my_app; # match the name of upstream directive which is defined above 
       proxy_set_header Host $host; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       } 

       location /assets { 
       alias /var/app/current/public/assets; 
       gzip_static on; 
       gzip on; 
       expires max; 
       add_header Cache-Control public; 
       } 
      } 
    "/opt/elasticbeanstalk/hooks/appdeploy/post/03_restart_nginx.sh": 
     mode: "000755" 
     owner: root 
     group: root 
     content: | 
      #!/usr/bin/env bash 
      rm /etc/nginx/conf.d/webapp_healthd.conf.bak 
      rm /etc/nginx/conf.d/custom.conf    
      service nginx restart 
+0

Ero riluttante a seguire questa strada, nel caso in cui EB apporti alcune modifiche a questo file. Ma c'erano molte altre modifiche che dovevo apportare alla configurazione di EB nginx, quindi alla fine sono andato con questo approccio. –

+0

funziona ancora per te? nella stessa situazione, la configurazione di nginx non sembra funzionare. è un po 'poco chiaro quali file nginx siano effettivamente utilizzati per cosa. Ho modificato quello che hai fatto sopra -via ssh per verificarlo funziona, dopo aver riavviato nginx, nessun successo ancora –

+0

@RickyBrown Sì, funziona ancora. Sfortunatamente non ho un suggerimento per te. – thebenedict

0

avevo bisogno di eseguire semplicemente bundle exec rake assets:precompile

Problemi correlati