Rails+Unicorn+Heroku+Asset Pipeline Assets不接受来自网站外部的呼叫



我有一个RailsUnicornHeroku上运行的堆栈,我静态地为资产提供服务,这样我就可以配置Cloudfront

Cloudfront试图请求某些资产时,独角兽正在引发错误,我检查了独角兽的源代码,显然body带有nil值,最有趣的部分是,当从网站内的浏览器中请求资产时,它们会得到很好的服务。我还运行了curl mypage.com/assets/some_asset.css,它在Rails的日志中引发了完全相同的错误。以下是Rails日志中显示的错误,以及我在机器上运行curl时遇到的错误。

2013-12-09T15:43:25.758765+00:00 app[web.1]: E, [2013-12-09T15:43:25.758676 #15] ERROR -- : app error: undefined method `each' for nil:NilClass (NoMethodError)
2013-12-09T15:43:25.758842+00:00 app[web.1]: E, [2013-12-09T15:43:25.758775 #15] ERROR -- : /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.7.0/lib/unicorn/http_response.rb:60:in `http_response_write'
2013-12-09T15:43:25.758892+00:00 app[web.1]: E, [2013-12-09T15:43:25.758811 #15] ERROR -- : /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.7.0/lib/unicorn/http_server.rb:590:in `process_client'
2013-12-09T15:43:25.758936+00:00 app[web.1]: E, [2013-12-09T15:43:25.758868 #15] ERROR -- : /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.7.0/lib/unicorn/http_server.rb:660:in `worker_loop'
2013-12-09T15:43:25.759023+00:00 app[web.1]: E, [2013-12-09T15:43:25.758945 #15] ERROR -- : /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.7.0/lib/unicorn/http_server.rb:527:in `spawn_missing_workers'
2013-12-09T15:43:25.759023+00:00 app[web.1]: E, [2013-12-09T15:43:25.758991 #15] ERROR -- : /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.7.0/lib/unicorn/http_server.rb:153:in `start'
2013-12-09T15:43:25.759023+00:00 app[web.1]: E, [2013-12-09T15:43:25.759016 #15] ERROR -- : /app/vendor/bundle/ruby/2.0.0/gems/unicorn-4.7.0/bin/unicorn:126:in `<top (required)>'
2013-12-09T15:43:25.759089+00:00 app[web.1]: E, [2013-12-09T15:43:25.759041 #15] ERROR -- : /app/vendor/bundle/ruby/2.0.0/bin/unicorn:23:in `load'
2013-12-09T15:43:25.759089+00:00 app[web.1]: E, [2013-12-09T15:43:25.759066 #15] ERROR -- : /app/vendor/bundle/ruby/2.0.0/bin/unicorn:23:in `<main>'

我从卷曲中得到的错误:

HTTP/1.1 500 Internal Server Error
curl: (18) transfer closed with 4283 bytes remaining to read

这可能是由于独角兽的配置被设置为30秒,但错误发生得很快,甚至没有一整秒的传球。

编辑I:因为我正在使用Heroku,并且我的应用程序有大量资产,所以不可能在Heroku超时之前编译所有资产,因此我在本地编译资产并将其推送到Heroku。

好的,找出问题所在。

出于某种原因,当请求不是来自网络浏览器时,应用程序访问memcached的方式是不同的,因为我的memcached服务器被禁用了,它抛出了一个完全无关的错误。谢谢你的帮助!

最新更新