2012-01-12 10 views
3

はまだこの作業を取得することはできません... Railsの3.1.3、RubyはHerokuののシーダースタックに1.9.2。Herokuの+ラック書き換え

http://domain 301は運にhttp://www.domainにリダイレクトするためにhttps://github.com/jtrupiano/rack-rewriteを使用しようとすると(アプリの作品が、ないリダイレクトが全く起こりません)。

/config/initializers/rack_rewrite.rb(もしmyAppNameは、domain.comは、実際のドメイン正しい名前で実際にされた):Gemfileに追加

MyAppName::Application.config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do 
    r301 %r{.*}, 'http://www.domain.com$&', :if => Proc.new {|rack_env| 
    rack_env['SERVER_NAME'] != 'www.domain.com' 
    } 
end 

gem 'rack-rewrite' 

は「宝石インストールしましたラックの書き換え "、"バンドルのインストール "があります。

No luck。

アイデア?

UPDATE:

私は問題の一部を考え出しました。私は "index.html"と "/ style"フォルダを提供しようとしているだけなので、 "/ public"に "index.html"を置くと、ラックリライトが上書きされます。私が "index.html"を削除した場合、書き直しはうまくいきましたが、今はどこにファイルを置くか分からず、routes.rbを設定してindex.htmlページをデフォルトにします... ?

+0

それは本当に不思議です。私はこのコードを使用しているHeroku/Cedar/Railsアプリの半ダースに対してスニペットをチェックしました。最も奇妙な! –

+1

いくつかのファイルに「rack-rewriteが必要」のようなものがありませんか? – David

+0

いいえ、そんなことはありません。それはgemfileにあるように自動的に読み込まれます。 –

答えて

5

変更

rack_env['SERVER_NAME'] != 'www.domain.com' 

私はこれに新たなんだので、私はそれが動作する理由として何の論理的な説明がありませんが、私はコードを入れたときに、それは私のために働いていました新しいファイル/config/initializers/rack_rewrite.rbではなく、config/application.rbにあります。

+0

:) – Sucrenoir

0

この場合、「app7009.intra.foo」のようにenv ["SERVER_NAME"]が内部DNSになる可能性があります。私はHerokuのミドルウェア内のドメインを持ついくつかのものを実行します。私はENV [「REQUEST_URI」]およびenv [「PATH_INFO」]の両方を見て、私はローカルで使用POW-サーバはREQUEST_URIを設定していない主な理由。これは、異なるサーバーがenvハッシュにどのように取り込まれているか、少し違っています。私は、このURLリクエスト部分がラックのようなものでより標準的であることを望みます。

rack_env['SERVER_NAME'] == 'domain.com' 
+0

あなたは何かを変えることを私に示唆している? – David

+0

SERVER_NAMEは実際にはwww.foobar.comではなく、プロキシの背後にあるサーバーの内部名である可能性があるため、この再書き込みのために 'SERVER_NAME'ではなく 'REQUEST_URI'を表示する必要があります。それは英雄のプロキシ設定です。 – sunkencity

+0

ですから、rack_env ['SERVER_NAME']!= 'www.domain.com'の代わりにrack_env ['REQUEST_URI']!= 'www.domain.com' に変更してください。 – David

0

env['REQUEST_URI'] !~ /www.domain.com/