カスタムドメインwww.shmocket.comを介してHerokuでRails3.2アプリを実行しています。www.shmocket.comを唯一のオリジンとしてCloudFrontディストリビューションをセットアップしました。代替ドメイン名はcdn.shmocket.com
、CloudFrontディストリビューションのURLのCNAMEとして設定されているだけd3n87gn5nko8eq.cloudfront.net
です。
CloudFrontを介してアセットをリクエストすると、Railsアプリでエラーが発生します。
> 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ログファイル:
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が送信するヘッダーに奇妙に反応することが示唆されています。私は手動でミドルウェアを含めず、使用されている宝石のリストを確認しましたが、そこにも何も表示されませんでした。
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