大家好,我按照这个文档 http://ruby-journal.com/how-to-setup-rails-app-with-puma-and-nginx/ 配置 puma 和 nginx 跑 rails 4.1.1
访问页面出错:An error occurred. Sorry, the page you are looking for is currently unavailable. Please try again later.
nginx 的 error.log 出现如下错误: [crit] 17027#0: *1 connect() to unix:///home/steve/web/tmp/web.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://unix:///home/steve/web/tmp/web.sock:/", host: "localhost"
搜了很久没搞定,大家有什么解决办法吗?
@pynix 是在 nginx.conf 的 location 里加上这样的吗
location / {
root /home/steve/web/public;
}
说下我的解决方法吧
戳 gists 浏览或下载
18 行 false 改为 true
# Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_assets = true
RAILS_ENV=production rake assets:precompile
bundle exec -C config/puma.rb -e production
右键查看源码,如果 assets 是 /stylesheet/application.css 这样的,说明启动环境不对,启动 puma 时 -e production 了?
如果 assets 路径是对的,/assets/application-xxxxxxxxx.css,而文件确实存在,但是仍然访问不了,可以看 production.log,一般会显示路由找不到,说明文件经过了路由,而不是直接由 nginx 返回。上面 18 行改为 true 就是解决这个
这是本菜最近自学时找到的解决办法,在我的电脑上是可以的,不知能不能帮到你~
这是我前天摸索出来方法之后写的文章:真难!终于搞定了 nginx + puma 部署 rails 4
@pynix 用了,html 源码里还有几个重复的
<script src="/assets/application-253bbf63f38893fd31a156cad9124b61.js"></script>
@alixiaomiao 建议设置成 false
# Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_assets = true
因为设置成 true 是让 rails 来处理静态资源吧
@pynix 在本机上跑呢。现在看 access.log 文件里有
"GET /assets/application-240f06338b04ca2bcd1ba1a6e222db0a.js HTTP/1.1" 200 469087 "http://localhost/"
,响应是 200,看来 precompile 的 js 文件是可以访问了。但同时 error.log 文件里
[error] 11306#0: *1 open() "/home/steve/web/public/assets/application.js" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /assets/application.js?body=1 HTTP/1.1", host: "localhost", referrer: "http://localhost/"
,还请求了未编译的 js 文件,还是本地路径的,这是什么情况?
"GET /assets/application.js?body=1 HTTP/1.1", host: "localhost"
从这个来看你的 rails 是 development 模式。。。。
@pynix 不是 development 模式,puma.rb 文件
environment 'production'
APP_ROOT = '/home/steve/web'
pidfile "#{APP_ROOT}/tmp/pids/puma.pid"
state_path "#{APP_ROOT}/tmp/pids/puma.state"
bind 'unix:///home/steve/web/tmp/web.sock'
workers 0
threads 8,32
preload_app!
@Victor puma 启动有这个,
Puma starting in single mode...
* Version 2.8.2 (ruby 2.1.2-p95), codename: Sir Edmund Percival Hillary
* Min threads: 8, max threads: 32
* Environment: production
应该能说明是 production 吧
类似 问题 unix:///var/www/railsServer/shared/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream 通过 rm tmp/sockets/* 然后重启解决
遇到一样的问题,通过 cap production puma:restart
解决。而且如果我没有 set :linkd_dirs
是没有问题的,一旦 set :linkd_dirs
后就会在 nginx.error.log 里看和 #30 楼一样的 log,必须每次在 cap production deploy
后再运行一下 cap production puma:restart
.