【问题标题】:Rails + Unicorn + Heroku + Asset Pipeline Assets not being served to calls from outside the websiteRails + Unicorn + Heroku + Asset Pipeline 资产未提供给来自网站外部的调用
【发布时间】:2013-12-09 15:47:39
【问题描述】:

我有一个堆栈,其中 RailsUnicornHeroku 上运行,我正在静态提供资产,以便我可以配置 云端。

Cloudfront 尝试请求某些资产时 unicorn 引发错误,我检查了 unicorn 的源代码,显然 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

这可能是由于 unicorn 的配置设置为 30 秒,但错误发生得非常快,甚至不到一秒。

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

【问题讨论】:

  • 所以当您将资产部署到 Heroku 时,您正在预编译资产,对吧?
  • 是的,没错。它们都是预编译的。
  • 您应该使用 Chrome 的检查器看到浏览器提供的样式表的名称。您会看到 Rails 已将一些字符串附加到您的 CSS 文件以破坏浏览器缓存。
  • 使用 curl -v 和 Chrome 的开发者工具来获得两种情况下完整的原始请求。将它们粘贴到此处。

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


【解决方案1】:

好的,找出问题所在。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2011-11-14
    • 1970-01-01
    • 2014-04-13
    • 2011-09-21
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多