2016-01-23 5 views
13

Dies ist eine AWS-Frage, ich benutze die Ruby 2.2 (Puma) -Plattform.Wie kann ich Assets in/public bereitstellen, die nicht Teil der Asset-Pipeline mit puma/nginx sind?

Meine kompilierten Assets (in/public/Assets) werden wie erwartet geliefert. Die anderen Vermögenswerte in/public werden nicht bedient (404).

Wo konfiguriere ich das? Ist das ein Nginx-Problem? oder ein Puma-Problem?

Oder ist dies nur ein AWS-Bildproblem?

Hier ist ein anschauliches Beispiel (robots.txt sollte von der Wurzel serviert): http://staging.us-west-2.elasticbeanstalk.com/public/robots.txt

Es ist auch erwähnenswert, dass das Standard-Passagier Plattform Bild arbeitet aus dem Kasten heraus.

+2

benötigt laufen Können Sie uns die Namen/Orte der anderen Vermögenswerte in Ihrem 'public' dir? –

+0

Du meinst wie 422.html, 500.html, favicon.ico? – chrisp

+1

Ja, Sie sagen, dass Sie Vermögenswerte im öffentlichen Verzeichnis haben, die nicht angezeigt werden, aber einige werden. Um einen gültigen Vergleich zu machen, muss ich wissen, was Sie haben, was nicht angezeigt wird. –

Antwort

4

Also, ich bin mit der exakt gleichen Umgebung und ich fand die Lösung mit einem wenig google fu:

Mit Schienen 4+, in der Datei:

/config/environments/production.rb 

Sie folgende finden sollten Linien in der Nähe der Spitze der Datei

# 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? 

das ist alles schön und gut ist, da wir Passagier (nginx oder apache) verwenden, aber Puma nicht handhaben dies für uns :)

dieses ... für das Projekt in Frage, und klicken Sie auf ‚Konfiguration‘ auf der linken Seite des Menüs

In Ihrer AWS-Konsole zu Ihrem elastischen Bohnenstengel Armaturenbrett zu beheben.

Klicken Sie nun das kleine Zahnrad-Symbol im Feld mit dem Titel ‚Software Configuration‘

Nun sollten Sie eine Tabelle unter ‚Umwelt Eigenschaften‘ sehen, geben Sie ‚RAILS_SERVE_STATIC_FILES‘ in ein neues Feld unter ‚Name‘, geben Sie dann 'true' (ohne Anführungszeichen) in das Wertfeld, triff apply.

Viola! Jetzt Ihr Projekt dient statische Dateien :)

+6

Der Anwendungsserver sollte keine statischen Assets in der Produktion bereitstellen. Es ist ineffizient, wenn statische Dateien auf die Rails-App zugreifen. http://guides.rubyonrails.org/configuring.html – thebenedict

4

Falls es jemand hilft, oder jemand weiß, wie es zu verbessern, hier ist die Nginx-Konfiguration, die es endlich funktioniert für mich. 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

Ich zögerte, diese Route zu gehen, falls EB einige Änderungen an dieser Datei vornimmt. Aber es gab noch einige andere Modifikationen, die ich an der EB-nginx-Konfiguration vornehmen musste, also ging ich schließlich mit diesem Ansatz. –

+0

funktioniert das noch für dich? Ich bin in der gleichen Situation, die Optimierung der nginx-Konfiguration scheint nicht zu funktionieren. Es ist ein wenig unklar, welche Nginx-Dateien tatsächlich für was verwendet werden. ich änderte das, das du oben getan hast - über ssh, um es zu verifizieren, funktioniert nach dem Neustart von nginx, kein Erfolg noch –

+0

@RickyBrown Ja, noch arbeitend. Ich habe leider keinen Vorschlag für dich. – thebenedict

0

ich einfach bundle exec rake assets:precompile