2013-07-18 10 views
5

Ich baue ein VPS, und es ist über Capistrano bereitgestellt, Datenbank verbunden usw., aber es sind keine Assets auf der Seite verfügbar - es ist nur grundlegende HTML.Rails Assets fehlen nach Capistrano deploy

Die Assets scheinen kompiliert zu sein und existieren im Verzeichnis shared.

Von der Seite html:

<link href="/assets/application-a1b5d69aeaff709fd3dce163c559b38b.css" media="all" rel="stylesheet" type="text/css" /> 
<script src="/assets/application-0ebd07089629f8c6880dddfb688d525d.js" type="text/javascript"></script> 

Die Asset-Dateien im zu existieren scheinen geteilt Verzeichnis:

[email protected]:~/apps/assay/shared/assets$ ls application- a1b5d69aeaff709fd3dce163c559b38b.css 
application-a1b5d69aeaff709fd3dce163c559b38b.css 

Wenn ich Ansicht, Quelle und klicken Sie dann auf den Hyperlink zu Im Asset-Pfad bekomme ich einen 404 von Nginx nicht gefunden.

SOLUTION

Dank Martin M (akzeptierte Antwort) um Hilfe. Die Schritte, die ich ausgeführt habe, aus dem Verzeichnis ~/apps/(App-Name)/current auf dem Server.

$ bundle install 
$ RAILS_ENV=production bundle exec rake assets:precompile 
$ sudo service nginx restart 

Offensichtlich wäre es besser, dies in das Capistrano-Rezept aufzunehmen.

* EDIT - Capfile *

load 'deploy' 
load 'deploy/assets' 
load 'config/deploy' 

Antwort

4

Ihre vorkompilierte Vermögenswerte sollten in public/assets wohnen, sehen rails guides
normalerweise Sie sie erstellen, indem

RAILS_ENV=production bundle exec rake assets:precompile 

als Teil der Bereitstellung ausgeführt wird.
Das geteilte Zeug ist, über mehrere Bereitstellungen alte Sachen zur Verfügung zu stellen.

Siehe auch dieses question

+0

Vielen Dank für Ihre Antwort hilft. Soll die Vorkompilierung auf dem Entwicklungsrechner oder dem Produktionsserver ausgeführt werden? Gibt es eine Möglichkeit, dies in die Cap-Bereitstellung aufzunehmen? – ardochhigh

+0

Der "Standard" Weg ist es, die Zeile 'load 'deploy/assets' in' Capfile' zu ​​aktivieren. Es führt bei jeder Bereitstellung eine Vorkompilierung auf dem Server aus. –

+0

Ich habe das. Ich habe meine Capfile oben hinzugefügt. – ardochhigh

4

Das Problem kann nicht in Asset-Kompilierung und Bereitstellung sein. Versuchen Sie nginx root/home/deploy/app_name/public zu ändern; nach/home/bereitstellen/app_name/current/public; in der nginx-Konfigurationsdatei/etc/nginx/sites-enabled/default.

sudo nano /etc/nginx/sites-enabled/default 

finden meine Konfigurationsdatei

upstream app { 
    # Path to Puma SOCK file, as defined previously 
    server unix:/home/deploy/app_name/shared/tmp/sockets/puma.sock fail_timeout=0; 
} 
server { 
    listen 80; 
    server_name localhost; 

    root /home/deploy/app_name/current/public; 

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

    location/{ 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Host $host; 
    proxy_redirect off; 
    proxy_http_version 1.1; 
    proxy_set_header Connection ''; 
    proxy_pass http://app; 
    } 

    location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt { 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 

    error_page 500 502 503 504 /500.html; 
    client_max_body_size 4G; 
    keepalive_timeout 10; 
} 

Hope this

+0

Großartig! Das war das Problem. – loxosceles