部署 Puma 部署 Rack 静态文件在 Daemon 模式下遭遇 404 问题

dsh0416 · 发布于 2016年8月04日 · 最后由 dsh0416 回复于 2016年8月05日 · 560 次阅读
21472

虽然这个问题无关紧要,因为实际生产的时候都是拿 Nginx 或者 CDN 来 host 静态文件。 但是前几个月在开发中偶然遇到的这个问题,确实感到非常疑惑。

首先,我有如下一个 config.ru

#\ -s puma
require 'bundler'
Bundler.require

Mongoid.load!('./config/mongoid.yml', ENV['RACK_ENV'].to_sym)
Mongoid.logger.level = Logger::DEBUG

# 一些实际业务的文件引用......

Faye::WebSocket.load_adapter('puma')

use Rack::Static,
    :urls => %w'/app /js /css /img /font /audio',
    :root => 'public'

run Rack::URLMap.new(
   # 实际业务的 Route
)

使用 rackup 命令启动,静态资源访问正常。 使用 rackup -D 命令启动,静态资源全部 404 Not Found。

我起初认为是 production 模式下不处理静态文件之类的,于是我尝试了 rackup -D -E production 不工作 rackup -D -E development 不工作 rackup -E production 工作 rackup -E development 工作

于是我将我 config.ru 的第一行

#\ -s puma

改成了

#\ -s thin

一切都工作正常了。 所以,可能地,我遇到了一个有关于 puma 的问题,有没有熟悉的 puma 源码的具体解释一下产生这个问题的原因,亦或是一个 bug 呢?

共收到 2 条回复
1364
hlcfan · #1 · 2016年8月05日

你贴一些 log 出来? 会不会是之前的 daemon 进程没有杀掉?

21472
dsh0416 · #2 · 2016年8月05日

#1楼 @hlcfan 肯定不是杀进程的问题。。。我 lsof -i:9292 确认过的。。。log 的话。。。是哪一部分的 log?404 它并不像 500 服务器的错误,并不会把出错的栈打印下来啊。。。。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册