虽然这个问题无关紧要,因为实际生产的时候都是拿 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 呢?