我正在构建一个VPS,它通过Capistrano部署,数据库连接等,但页面没有可用的资源 - 它只是基本的html。
资产似乎已编译,并存在于共享目录中。
来自页面html:
<link href="/assets/application-a1b5d69aeaff709fd3dce163c559b38b.css" media="all" rel="stylesheet" type="text/css" />
<script src="/assets/application-0ebd07089629f8c6880dddfb688d525d.js" type="text/javascript"></script>
资产文件似乎存在于共享目录中:
assay@assaypipeline:~/apps/assay/shared/assets$ ls application- a1b5d69aeaff709fd3dce163c559b38b.css
application-a1b5d69aeaff709fd3dce163c559b38b.css
当我查看,来源然后点击指向资产路径的超链接时,我从Nginx找不到404.
解
感谢Martin M(接受了答复)的帮助。我从服务器上的〜/ apps /(app name)/ current目录中采取的步骤。
$ bundle install
$ RAILS_ENV=production bundle exec rake assets:precompile
$ sudo service nginx restart
显然,将它包含在Capistrano配方中会更好。
* 编辑 - Capfile *
load 'deploy'
load 'deploy/assets'
load 'config/deploy'
答案 0 :(得分:4)
您的预编译资产应位于public/assets
,请参阅rails guides
通常你通过运行
RAILS_ENV=production bundle exec rake assets:precompile
作为部署的一部分。
共享的东西是通过多种部署提供旧东西。
另见question
答案 1 :(得分:4)
问题可能不在资产编译和部署中。 尝试更改nginx root / home / deploy / app_name / public;到/ home / deploy / app_name / current / public;在nginx配置文件/ etc / nginx / sites-enabled / default。
sudo nano /etc/nginx/sites-enabled/default
以下是我的配置文件
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;
}
希望这有帮助