Rails, production-env, "Объект не пропущен постоянной" - PullRequest
2 голосов
/ 30 октября 2010

Так что, похоже, я был глуп и давно не проверял работу в 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 ]

3 голосов
/ 02 апреля 2013

Когда я получил эту ошибку, это происходит из-за ошибки во внутреннем классе / модуле, который находится внутри класса / модуля, упомянутого в ошибке.

2 голосов
/ 30 октября 2010

Я не могу сказать, является ли это опечаткой или реальным кодом, но:

class User < InheritedResources::Base
  include HistoryTools
end

Вероятно, должно быть

class User < ActiveRecord::Base
  include HistoryTools
end

InheritedResources следует использовать для контроллеров, а не моделей.

0 голосов
/ 31 октября 2010

хорошо, после долгих часов копания кажется, что это вообще не было связано с этим. Это была ошибка еще в 3 классах на дереве, которая не работала по другой странной причине, и, видимо, исключение было поймано где-то внутренними компонентами рельсов и просто игнорировалось.

К сожалению, это не объясняет, почему это работало в режиме разработки, но по крайней мере все мои вещи работают сейчас. В любом случае, спасибо!

0 голосов
/ 30 октября 2010

Вы не должны иметь требуемый 'history_tools' в environment.rb.В этой версии Rails все файлы в папке lib должны загружаться автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...