Rails, production-env, "Объект не пропущен постоянной"
Таким образом, я, кажется, был глуп и не проверял работу в production-env в течение длительного времени, и теперь, когда я пытаюсь развернуть, я получаю эту досадную ошибку. Есть идеи?
Библиотека / history_tools.rb
module HistoryTools
def self.included(base)
base.has_many :history, :dependent => :destroy
History::TYPES.each do |htype|
base.has_many "history_#{htype}", :class_name => "History::#{htype.capitalize}"
end
end
# ... other minor things removed ...
end
приложение / модели / user.rb
class User < InheritedResources::Base
include HistoryTools
end
конфиг / environment.rb
# ... the usual stuff, then, at the very bottom:
require 'history_tools'
Это дает ошибку:
activesupport-2.3.8/lib/active_support/dependencies.rb:417:in
`load_missing_constant':ArgumentError: Object is not missing
constant HistoryTools!
Если я добавлю дополнительный require 'history_tools'
в верхней части user.rb, я думаю, что она исправляет эту ошибку, но затем не может найти другие вещи в #{RAILS_ROOT}/lib
, которые требовались в environment.rb таким же образом.
The kicker: это отлично работает в режиме разработки. Это только дает эту ошибку в производстве. Большинство моих поисков в Google, кажется, указывают на то, что ошибки "не пропускают постоянные" относятся к тому, как Rails автоматически загружает файлы, которые должны исчезнуть при работе, когда ничего не выгружается. Кажется, это противоположно этому поведению?
4 ответа
Когда я получил эту ошибку, это происходит из-за ошибки во внутреннем классе / модуле, который находится внутри класса / модуля, упомянутого в ошибке.
Я не могу сказать, является ли это опечаткой или реальным кодом, но:
class User < InheritedResources::Base
include HistoryTools
end
Должно быть, должно быть
class User < ActiveRecord::Base
include HistoryTools
end
InheritedResources следует использовать для контроллеров, а не для моделей.
Хорошо, после долгих часов копания кажется, что это вообще не было связано с этим. Это была ошибка еще в 3 классах на дереве, которая не работала по другой странной причине, и, очевидно, исключение было где-то поймано внутренними компонентами рельсов и просто игнорировалось.
К сожалению, это не объясняет, почему это работает в режиме разработки, но, по крайней мере, все мои вещи работают сейчас. Спасибо, в любом случае!
Вам не нужно иметь обязательный аргумент history_tools в environment.rb. В этой версии Rails все файлы в папке lib должны загружаться автоматически.