2012-01-12 31 views
3

仍然無法得到這個工作...在Heroku的Cedar Stack上的Rails 3.1.3,Ruby 1.9.2。Heroku + Rack-Rewrite

試圖使用https://github.com/jtrupiano/rack-rewrite使http://domain 301重定向到http://www.domain沒有運氣(應用程序的作品,但沒有發生重定向)。

/config/initializers/rack_rewrite.rb(MyAppName實際上是正確的名稱,domain.com是實際域):

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 

加入Gemfile中:

gem 'rack-rewrite' 

沒有「創業板安裝機架重寫「,」捆綁安裝「。

沒有運氣。

任何想法?

UPDATE:

我已經找到了問題的一部分。由於我只是想爲「index.html」服務,而且它是「/ style」文件夾,因此似乎在「/ public」中包含「index.html」會覆蓋機架重寫。如果我刪除了「index.html」,重寫工作......但現在我不知道把文件放在哪裏,或者設置routes.rb默認指向index.html頁面......任何幫助?

+0

這真的很奇怪。我使用這段代碼檢查了半個我們的Heroku/Cedar/Rails應用程序的代碼片段,它完全正確。最奇怪的! – 2012-01-12 08:54:33

+1

我是否錯過了某些文件中的「需要機架重寫」? – David 2012-01-12 09:04:17

+0

不,不是那樣的。它會自動加載,因爲它在gemfile中。 – 2012-01-12 09:18:14

回答

5

變化

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

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

爲我工作:) – Sucrenoir 2012-04-03 10:31:18

0

我認爲可能env [「SERVER_NAME」]可能是一個內部的DNS在這種情況下,如'app7009.intra.foo'。我在heroku的中間件中做了一些與域相關的東西:我查看env ['REQUEST_URI']和env ['PATH_INFO'],主要是因爲我在本地使用的POW服務器沒有設置REQUEST_URI。不同的服務器如何填充env哈希值有點不同,我希望這個URL請求部分對於像rack這樣的東西更加標準。

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

我不確定你是否建議我改變一些東西? – David 2012-01-12 08:47:06

+0

我認爲你應該查看'REQUEST_URI'而不是'SERVER_NAME'進行重寫,這是因爲SERVER_NAME實際上可能不是www.foobar.com,而是代理服務器後面的服務器的內部名稱。這是在heroku的代理設置。 – sunkencity 2012-01-12 08:57:08

+0

因此,我應該更改爲rack_env ['REQUEST_URI']!='www.domain.com' 而不是rack_env ['SERVER_NAME']!='www.domain.com' – David 2012-01-12 09:01:48

0

我是新來這個,所以我有沒有合理的解釋,爲什麼它的工作原理,但它爲我工作,當我把代碼在config/application.rb而不是新文件/config/initializers/rack_rewrite.rb