Я не любитель рельсов, но я все еще учусь и, надеюсь, всегда буду: -).
В рабочей среде Rails 2.3 с использованием Ruby Enterprise Edition и пассажирской версии при запуске может возникнуть совершенно вводящая в заблуждение бесполезная ошибка (/var/log/passenger.log). Что-то вроде:
Исключение NameError в PhusionPassenger :: Rack :: ApplicationSpawner (неинициализированная константа XXX)
Если вы запустите скрипт / консоль на рабочем сервере, вы можете увидеть:
Loading production environment (Rails 2.3.4)
/home/ubuntu/MyApp/shared/bundle/ruby/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:105:in const_missing:NameError: uninitialized constant XXX
Это происходит со мной в данном случае только в производственной среде, а не на стадии разработки и не в разработке. После целого дня исследований и экспериментов я пришел к выводу, что в производственной среде REE или что-то еще должно предварительно загружать классы, а предварительный загрузчик, по-видимому, не хочет, чтобы классы открывались заново перед их созданием (обоснованное предположение ).
В приложении / models / calendar.rb:
Class Calendar < ActiveRecord::Base
# This defines the class
End
В приложении / models / event.rb
Class Event < ActiveRecord::Base
# This desined the class
End
Class Calendar
# This is supposed to 're-open' the Calendar class
has_many :events
end
Приведенный выше фрагмент кода общего примера может вызвать проблемы при запуске. Я не уверен в порядке, в котором происходит предварительная загрузка классов, но я подозреваю, что это может быть проблемой. Я переместил «has_many: events» в определение класса в app / modeles / calendar.rb, и теперь мое приложение запускается без ошибок.
Итак, хорошее правило, которому нужно следовать, - помещать ваши ассоциации активных записей (has_many, assign_to) внутри определяющего класса (где класс создается).