首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过CloudFront提供CSS文件时出错,直接从源文件运行正常

通过CloudFront提供CSS文件时出错,直接从源文件运行正常
EN

Stack Overflow用户
提问于 2012-09-11 15:06:57
回答 1查看 656关注 0票数 1

我通过自定义域www.shmocket.com在Heroku上运行了一个Rails3.2应用程序。我设置了一个以www.shmocket.com作为唯一源的CloudFront发行版。它的备用域名是cdn.shmocket.com,它被简单地配置为CloudFront发行版的URL d3n87gn5nko8eq.cloudfront.net的CNAME。

当我通过CloudFront请求资产时,Rails应用程序给我一个错误:

代码语言:javascript
复制
> curl http://cdn.shmocket.com/assets/application-dce210940d2cd3c699c4809800ae2f0b.css

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
  <HEAD><TITLE>Internal Server Error</TITLE></HEAD>
  <BODY>
    <H1>Internal Server Error</H1>
    undefined method `each' for nil:NilClass
    <HR>
    <ADDRESS>
     WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20) at
     www.shmocket.com:80
    </ADDRESS>
  </BODY>
</HTML>
curl: (18) transfer closed with 100318 bytes remaining to read

在Rails日志文件中:

代码语言:javascript
复制
2012-09-11T06:53:28+00:00 app[web.1]: [2012-09-11 06:53:28] ERROR NoMethodError: undefined method `each' for nil:NilClass
2012-09-11T06:53:28+00:00 app[web.1]:   /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/handler/webrick.rb:71:in `service'
2012-09-11T06:53:28+00:00 app[web.1]:   /app/vendor/ruby-1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
2012-09-11T06:53:28+00:00 app[web.1]:   /app/vendor/ruby-1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
2012-09-11T06:53:28+00:00 app[web.1]:   /app/vendor/ruby-1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
2012-09-11T06:53:28+00:00 heroku[router]: GET www.shmocket.com/assets/application-dce210940d2cd3c699c4809800ae2f0b.css dyno=web.1 queue=0 wait=0ms service=18ms status=500 bytes=325

直接访问http://www.shmocket.com/assets/application-dce210940d2cd3c699c4809800ae2f0b.css可以很好地工作。

在使用真实的CloudFront域(即http://d3n87gn5nko8eq.cloudfront.net/assets/application-dce210940d2cd3c699c4809800ae2f0b.css )时,也会发生同样的错误

CloudFront配置:

http://screencast.com/t/A62AKBGX

http://screencast.com/t/u9Grgj5i

http://screencast.com/t/vzRduwxor50v

老实说,我被难住了,根本不知道是什么导致了这种情况。我怀疑这是很明显我忽略了什么.

任何建议都是值得感谢的。

编辑:

有人认为,一些中间件对CloudFront发送的报头做出了奇怪的反应。我没有手动包含任何中间件,并检查了使用过的gem的列表,我也看不到任何东西:

代码语言:javascript
复制
source :rubygems

ruby '1.9.3'

gem 'rails', '~> 3.2.8'
gem 'haml', '~> 3.2.0.beta.3'
gem 'jquery-rails', '2.0.2'
gem 'slim_migrations', '~> 3.2.1'
gem 'redis', '~> 2.2.2'
gem 'redis-rails', '~> 3.2.3'
gem 'memoizer', '~> 1.0.1'
gem 'marginalia', '~> 1.1.0'
gem 'awesome_print', '~> 1.0.2'
gem 'log_buddy', '~> 0.7.0'
gem 'squeel', '~> 1.0.9'
gem 'airbrake', '~> 3.1.2'
gem 'httparty', '~> 0.8.3'
gem 'ember-rails', '~> 0.7.0'

group :assets do
  gem 'oily_png', '~> 1.0.2'
  gem 'bootstrap-sass', github: 'dszczyt/bootstrap-sass'
  gem 'font_awesome', '~> 2.0.0'
  gem 'sass-rails', '~> 3.2.5'
  gem 'compass-rails', '~> 1.0.3'
  gem 'coffee-rails', '~> 3.2.2'
  gem 'uglifier', '~> 1.2.7'
end

group :development do
  gem 'heroku', '~> 2.30.5'
  gem 'annotate', '~> 2.5.0'
  gem 'foreman', '~> 0.57.0'
  gem 'quiet_assets', '~> 1.0.1'
  gem 'sextant', '~> 0.1.3'
  gem 'right_aws', '~> 3.0.4'
end

group :development, :test do
  gem 'mysql2', '~> 0.3.12b4'
end

group :production do
  gem 'pg', '~> 0.14.0'
end
EN

回答 1

Stack Overflow用户

发布于 2013-05-12 14:50:45

看起来这是Heroku的Rack::Cache + Dalli gem的问题

https://github.com/rails/rails/issues/8366

在production.rb中禁用Rack::Cache加载已修复此问题:

代码语言:javascript
复制
config.action_dispatch.rack_cache = nil
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12364473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档