我正在尝试将rails4(ruby-2.0.0)应用程序部署到我的服务器上。我的几乎所有资产都经过预编译,并由nginx提供服务。
一个js.erb,通过从我的数据库中获取模型来生成动态html列表。此资产无法预编译,因为它必须保持动态。
我将资产从asset.precompile中排除,然后启用
config.assets.compile = true
回归资产管道,为这一资产。
在我的本地生产环境中,everthing正在运行,但在我的服务器(nginx,unicorn)上,资产管道回退将无效。我得到一个简单的404错误
nginx错误日志:
2013/09/13 08:54:54 [error] 27442#0: *58 open() "/XXX/current/public/assets/rails_admin/rails_admin_switchable-051203ae1d7aca2c08092e5c92bcdf15.js" failed (2: No such file or directory), client: XXX, server: , request: "GET /assets/rails_admin/rails_admin_switchable-051203ae1d7aca2c08092e5c92bcdf15.js HTTP/1.1", host: "XXX", referrer: "http://XXX/admin"
独角兽和rails不会显示任何错误。
任何想法,我如何解决这个问题?
最好的, 弗朗兹
答案 0 :(得分:2)
您的nginx服务器定义似乎未与您的应用服务器正确集成。它应配置为将与物理文件不匹配的请求传递给应用服务器。
以下是通过unicorn / UNIX-socket集成在/app
中使用nginx的rails应用程序的标准配置:
upstream app_server {
server unix:/tmp/nginx.socket fail_timeout=0;
}
server {
listen <%= ENV["PORT"] %>;
server_name _;
keepalive_timeout 5;
# path for static files
root /app/public;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
# Rails error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /app/public;
}
}
如果您的资产管道汇编为/app/public/assets
,那么您应该很高兴。