2013-07-18 38 views
5

Tôi đang xây dựng một VPS, và nó được triển khai thông qua Capistrano, cơ sở dữ liệu kết nối vv, nhưng không có tài sản có sẵn cho trang - đó là html cơ bản duy nhất.Rails tài sản bị thiếu sau khi Capistrano triển khai

Nội dung có vẻ được biên soạn và tồn tại trong được chia sẻ thư mục.

Từ html page:

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

Tài sản file xuất hiện để tồn tại trong chia sẻ thư mục:

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

Khi tôi xem, nguồn và sau đó nhấp vào liên kết để đường dẫn tài sản, tôi nhận được 404 không tìm thấy từ Nginx.

SOLUTION

Nhờ Martin M (Câu trả lời được chấp nhận) để được giúp đỡ. Các bước tôi đã thực hiện, từ thư mục ~/apps/(tên ứng dụng)/hiện tại trên máy chủ.

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

Rõ ràng sẽ tốt hơn nếu đưa vào công thức Capistrano.

* EDIT - Capfile *

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

Trả lời

4

tài sản precompiled của bạn nên cư trú tại public/assets, xem rails guides
thường bạn tạo chúng bằng cách chạy

RAILS_ENV=production bundle exec rake assets:precompile 

như một phần của việc triển khai của bạn.
Nội dung được chia sẻ là cung cấp nội dung cũ qua một số triển khai.

Xem thêm điều này question

+0

Cám ơn câu trả lời của bạn. Nên biên dịch trước được chạy trên máy phát triển hoặc máy chủ sản xuất? Có cách nào để bao gồm điều này trong việc triển khai Cap? – ardochhigh

+0

cách "chuẩn" là kích hoạt dòng 'tải 'triển khai/asset'' trong' Capfile'. Nó chạy 'precompile' trên máy chủ trên mọi triển khai. –

+0

Tôi có điều đó. Tôi đã thêm capfile của mình ở trên. – ardochhigh

4

Sự cố có thể không có trong quá trình biên soạn và triển khai nội dung. Hãy thử thay đổi nginx root/home/deploy/app_name/public; đến/home/deploy/app_name/current/public; trong tập tin cấu hình nginx/etc/nginx/sites-enabled/default.

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

Sau đây là tập tin cấu hình của tôi

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 helps

+0

Tuyệt vời! Đó là vấn đề. – loxosceles

Các vấn đề liên quan