Rails + Unicorn + Heroku +资产管道资产未被提供给来自网站外部的电话

时间:2013-12-09 15:47:40

标签: ruby-on-rails heroku asset-pipeline unicorn

我在 Heroku 上运行 Rails Unicorn 的堆栈,我正在静态地提供资源,因此我可以配置的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>'

我从curl得到的错误:

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

这可能是由于独角兽的配置被设置为30秒,但错误发生得非常快,甚至没有完整的第二次通过。

编辑I:因为我正在使用Heroku,而且我的应用程序有大量资产,所以在Heroku超时之前无法编译所有这些资源,因此我在本地编译资产把他们推到Heroku。

1 个答案:

答案 0 :(得分:0)

好的,找出问题所在。

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