Heroku未初始化常量Rails:Initializer(NameError)(noWWW机架中间件)



我正在Heroku上运行Cedar堆栈,rails 3.1.3。

使用: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(AppName=我的应用程序的正确名称。也就是说,这不是问题所在)

# 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:

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

我在使用Rails 3.1时也遇到了同样的问题。我最终使用了这个帖子。它似乎比其他解决方案更为复杂,但实际上只有两个步骤。

确保更改代码中的yoursite.com。我忽略了这一点,在修复后不得不匆忙进行另一次部署。

您收到的错误是,您正在引用旧版本的Rails。Rails3.1的初始化与两年前写这篇文章时有很大不同。特别是,这个块中现在不推荐使用的Rails::Initializer存在问题:

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

您可能会在机架重写方面运气更好。无论如何,请查看Rails官方文档,了解当前配置和初始化的详细信息。

看起来您的中间件文件没有被加载。将您的中间件类no_www.rb放在应用程序/中间件中。通过这种方式,它将由Rails自动加载。然后将您的config语句添加到application.rb中,接近末尾。

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

我遇到了这个问题;我知道这是一个迟来的答案,但我想为任何需要它的人添加这个。

确保OmniauthCallbacksController位于users文件夹中。"app/controllers/users/omniauth_callbacks_controller.rb"

相关内容

最新更新