2012-01-11 241 views
2

我在Heroku上運行Cedar堆棧,rails 3.1.3。Heroku未初始化的常量Rails:初始化程序(NameError)(noWWW Rack Middleware)

使用: http://trevorturk.com/2009/11/05/no-www-rack-middleware/

當我推到Heroku的,我得到:

app[web.1]: => Rails 3.1.3 application starting in production on http://0.0.0.0:15548 
app[web.1]: => Call with -d to detach 
app[web.1]: => Ctrl-C to shutdown server 
app[web.1]: Exiting 
app[web.1]: /app/config/environment.rb:7:in `<top (required)>': uninitialized constant Rails::Initializer (NameError) 

任何人有什麼回事任何想法?

這裏是我的environment.rb

# Load the rails application 
require File.expand_path('../application', __FILE__) 

# Initialize the rails application 
AppName::Application.initialize! 

Rails::Initializer.run do |config| 
    config.middleware.use "NoWWW" if RAILS_ENV == 'production' 
end 

的lib/no_www.rb(我的應用程序AppName的正確=名稱即那不是問題。):

class NoWWW 

    STARTS_WITH_WWW = /^www\./i 

    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    if env['HTTP_HOST'] =~ STARTS_WITH_WWW 
     [301, { 'Location' => Rack::Request.new(env).url.sub(/www\./i, '') }, ['Redirecting...']] 
    else 
     @app.call(env) 
    end 
    end 

end 

回答

0

錯誤您收到告訴你,你正在引用舊版本的Rails。 Rails 3.1的初始化與2年前編寫該文章時的不同。特別是,該問題是在此塊現在反對的Rails::Initializer

Rails::Initializer.run do |config| 
    config.middleware.use "NoWWW" if RAILS_ENV == 'production' 
end 

你可能有更多的運氣與rack-rewrite。無論如何,請查看官方Rails文檔,以獲得目前的configurationinitialization的詳細分類。

+0

任何想法如何實現我想要的機架重寫? github上的README並不能很好地解釋... – David 2012-01-12 03:18:04

0

看起來你的中間件文件沒有被加載。將您的中間件類no_www.rb放入應用程序/中間件中。這樣它將被Rails自動加載。然後將你的配置語句添加到application.rb中,接近結尾。

... 

    # Configure Rack middleware 
    config.middleware.use 'NoWWW' 

    end 
end 
1

我有使用Rails 3.1相同的問題。我結束了使用這個post。它似乎比其他解決方案更爲複雜,但實際上只有兩個步驟。

請務必在代碼中更改yoursite.com。我忽略了這一點,並且在修復後不得不再次部署。

0

我有這個問題;我知道這是一個遲到的答案,但我想爲需要它的人添加這個。

請確保您的OmniauthCallbacksController位於A文件夾users中。 "app/controllers/users/omniauth_callbacks_controller.rb"

相關問題