Неинициализированная константа Heroku Rails: Initializer (NameError) (промежуточное программное обеспечение для стойки RW) - PullRequest
2 голосов
/ 11 января 2012

Я запускаю стек Cedar на Heroku, рельсы 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

Ответы [ 4 ]

1 голос
/ 20 апреля 2012

У меня была такая же проблема при использовании Rails 3.1.Я закончил тем, что использовал это сообщение .Похоже, что он более вовлечен, чем другие решения, но на самом деле есть только два шага.

Обязательно измените yoursite.com в коде.Я упустил это из виду и должен был спешить с другим развертыванием после исправления.

0 голосов
/ 25 сентября 2012

У меня была эта проблема; Я знаю, что это поздний ответ, но я хотел добавить его для тех, кто в нем нуждался.

Убедитесь, что ваш OmniauthCallbacksController находится в папке users. "app/controllers/users/omniauth_callbacks_controller.rb"

0 голосов
/ 06 февраля 2012

Похоже, ваш файл промежуточного программного обеспечения не загружается.Поместите свой класс промежуточного программного обеспечения, no_www.rb в приложение / промежуточное программное обеспечение.Таким образом, он будет автоматически загружен Rails.Затем добавьте свой оператор конфигурации в application.rb, ближе к концу.

    ...

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

  end
end
0 голосов
/ 11 января 2012

Полученная ошибка говорит о том, что вы ссылаетесь на старую версию Rails.Rails 3.1 инициализируется немного иначе, чем 2 года назад, когда была написана эта статья.В частности, проблема связана с устаревшей Rails::Initializer в этом блоке:

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

Возможно, вам повезет больше с rack-rewrite .В любом случае, ознакомьтесь с официальной документацией по Rails для определения правильной разбивки текущей конфигурации и .

...