Как заставить Rails 3 перезагрузить классы STI в режиме разработки? - PullRequest
3 голосов
/ 06 января 2011

После перехода на Rails 3 я заметил, что мне нужно перезагрузить сервер, чтобы классы модели STI перезагружались при каждом запросе.Например, предположим, что у меня есть это:

# app/models/vehicle.rb
class Vehicle < ActiveRecord::Base
end

# app/models/car.rb
class Car < Vehicle
end

Если я внесу изменение в Vehicle, оно будет загружено при следующем запросе.Но если я внесу изменение в Car, мне придется перезагрузить свой сервер, чтобы он загрузился.

Любые идеи по исправлению этого?

У меня работает WEBrick, но яне привержен этому.

Ответы [ 3 ]

2 голосов
/ 13 июля 2011

Мы обнаружили, что нам нужно было и решение Zetetic, и некоторый дополнительный код для этой работы (по крайней мере, в Rails 3.0.9). Для вышеуказанной проблемы решение будет выглядеть примерно так:

В config / средах / development.rb:

  config.after_initialize do
    ["vehicle"].each do|dep|
      require_dependency( (Rails.root + "app/models/#{dep}").to_s )
    end
  end

В app / controllers / application_controller.rb:

class ApplicationController < ActionController::Base
  if Rails.env == 'development'
    require_dependency( (Rails.root + "app/models/vehicle").to_s )
  end
...

Код в development.rb обрабатывает начальную загрузку класса, а код в ApplicationController обрабатывает последующие запросы.

1 голос
/ 10 января 2011

Я считаю, что это можно решить, добавив require_dependency 'vehicle' в контроллер.

0 голосов
/ 27 января 2011

Используя рельсы 3.0.3 и пассажира 3, я этого не вижу вообще.Если обновление вашего приложения до версии 3.0.3 не устранит это, я бы отказался от WEBrick.

Я все равно лично рекомендую использовать что-то кроме WEBrick.Пассажир был моим любимым сервером для разработки + производства уже довольно давно.

...