【问题标题】:Heroku uninitialized constant Rails:Initializer (NameError) (noWWW Rack Middleware)Heroku 未初始化常量 Rails:Initializer (NameError) (noWWW Rack Middleware)
【发布时间】:2012-09-26 05:46:19
【问题描述】:

我在 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

【问题讨论】:

    标签: ruby-on-rails ruby redirect url-rewriting heroku


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您收到的错误是告诉您您引用的是旧版本的 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 的详细分类。

      【讨论】:

      • 知道如何实现我想要的机架重写吗? github 上的 README 真的解释的不太好……
      【解决方案3】:

      您的中间件文件似乎没有被加载。将中间件类 no_www.rb 放在 app/middleware 中。这样它就会被 Rails 自动加载。然后将您的配置语句添加到 application.rb,接近结尾。

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-01-12
          • 1970-01-01
          • 1970-01-01
          • 2019-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-19
          相关资源
          最近更新 更多