对此进行故障排除,我在本地计算机上预编译了资产,指纹与我服务器上的预编译指纹相匹配.此外,当在生产模式下使用webrick在本地运行时,一切正常.然后我尝试在我的服务器上运行webrick,这有效,让我觉得独角兽是问题的根源.
我通过使用–no-default-middleware(或-N)选项启动unicorn解决了这个问题,这使得独角兽的行为与预编译资产相同.我的理解是,这告诉独角兽不要加载一个默认的Rack中间件集,否则它会加载.但是,我真的不明白为什么这会解决问题,或者首先出现问题.到底是怎么回事?
一些细节:Ubuntu 12.04,Rails 4.0.1,Ruby 2.1.0,带有第三方主题的bootstrap 3.0
更新:
我不相信这是一个nginx问题的原因是,当我从浏览器请求页面,然后查看源代码时,application.css文件的文件名有指纹,所以它实际上看起来像application-3855b1928b94aa5bff5e1dac1aa56882. CSS.这与我服务器上文件的真实指纹不匹配.我确信服务器上的指纹是正确的,因为我在本地开发机器上获得了相同的指纹.所以客户端正在加载网页,然后向服务器询问.css文件… nginx接收到该请求,但找不到.css文件,因为它实际上不存在,所以nginx的行为符合预期.
指纹生成两次:一旦我预编译资产,这是正常工作(非常肯定),并且正在发生没有独角兽参与.第二次,当一个独角兽工作者的上下文中的rails看到stylesheet_link_tag帮助器并且即时计算指纹(我认为这就是它正在做的事情),这由于某种原因产生了错误的指纹.如果我在完全相同的服务器上用webrick替换unicorn会发生同样的过程,但在这种情况下指纹匹配.如果我用-N旗开始独角兽,指纹匹配,但我不知道为什么这会产生影响,我不知道为什么其他人似乎不必这样做.
解决方法
config.assets.compile = true config.assets.precompile = ['*.js','*.css','*.css.erb']
这适用于我.使用以下命令预编译资产
RAILS_ENV=production bundle exec rake assets:precompile
从https://stackoverflow.com/questions/18700219/rails-4-assets-not-loading-in-production
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。