我在这里有一个非常奇怪的问题。我在我的rails应用程序中使用了rack-zippy
gem,如果我在development
环境中启动它,而没有预编译的资源,它就像一个魅力。与-d
参数和无。rack-zippy和选项-d在生产环境中不提供静态资产
在生产模式下(同一台机器,同一个项目,同一目录,相同的宝石)它也可以工作。但是,如果我使用-d
param(bundle exec rails server -d
)启动它来守护服务器,则不会提供预编译的资产。可以用thin
和webrick
而不是用unicorn
重现。
日志说:
ActionController::RoutingError (No route matches [GET]
"/assets/application-b9b75968aed42128cfd75fb78df1e4d1.js"):
但:
$ l public/assets/application-b9b75968aed42128cfd75fb78df1e4d1.js
-rw-r--r-- 1 public/assets/application-b9b75968aed42128cfd75fb78df1e4d1.js
从配置/环境/ production.rb:
config.serve_static_assets = true
从配置/ application.rb中:
config.middleware.swap(ActionDispatch::Static, Rack::Zippy::AssetServer)
和:
$ rake middleware
use Rack::Sendfile
use Rack::Zippy::AssetServer
(...)
我现在有些困惑。有任何想法吗?
谢谢艾略特的建议。很高兴听到宝石开发者自己的声明。我会尽量按照你的想法和调试它那些天,并给你反馈:) – phortx
谢谢,我期待着找出你如何得到,祝你好运! –
好吧,我试过调试过。我发现的第一件事:'serve?'方法中的方法是一样的。这不是问题。但是如果服务器以守护进程模式运行,该方法返回false。如果放弃一个简单的'Dir.pwd'登录到'serve?'方法,它揭示了所有邪恶的原因(并且赞同你的直觉):没有'-d'的'Dir.pwd'是rails根目录。带'-d'的Dir.pwd只是'/'。 – phortx