Когда работа с драгоценными камнями в направляющих, что делает, 'не может удалить Объект:: основа ClassMethods от?

Часто я сталкивался с проблемой при установке драгоценных камней, который обеспечивает проблему как:

Кто-либо знает то, от чего это происходит? Я видел в нем несколько различных случаев, и все же не изучил то, что точно вызывает его.

$ sudo rake gems:install --trace
(in /u/app/releases/20100213003957)
** Invoke gems:install (first_time)
** Invoke gems:base (first_time)
** Execute gems:base
** Invoke environment (first_time)
** Execute environment
rake aborted!
cannot remove Object::ClassMethods
/u/app/releases/20100213003957/vendor/rails/activesupport/lib/active_support/dependencies.rb:603:in `remove_const'
/u/app/releases/20100213003957/vendor/rails/activesupport/lib/active_support/dependencies.rb:603:in `remove_constant'
/u/app/releases/20100213003957/vendor/rails/activesupport/lib/active_support/dependencies.rb:603:in `instance_eval'
/u/app/releases/20100213003957/vendor/rails/activesupport/lib/active_support/dependencies.rb:603:in `remove_constant'
/u/app/releases/20100213003957/vendor/rails/activesupport/lib/active_support/dependencies.rb:549:in `new_constants_in'
/u/app/releases/20100213003957/vendor/rails/activesupport/lib/active_support/dependencies.rb:549:in `each'
/u/app/releases/20100213003957/vendor/rails/activesupport/lib/active_support/dependencies.rb:549:in `new_constants_in'
/u/app/releases/20100213003957/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
/u/app/releases/20100213003957/vendor/rails/railties/lib/tasks/misc.rake:4
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:617:in `call'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:617:in `execute'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:612:in `each'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:612:in `execute'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:578:in `invoke_with_call_chain'
/usr/lib64/ruby/1.8/monitor.rb:242:in `synchronize'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:571:in `invoke_with_call_chain'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:564:in `invoke'
/u/app/releases/20100213003957/vendor/rails/railties/lib/tasks/gems.rake:17
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:617:in `call'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:617:in `execute'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:612:in `each'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:612:in `execute'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:578:in `invoke_with_call_chain'
/usr/lib64/ruby/1.8/monitor.rb:242:in `synchronize'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:571:in `invoke_with_call_chain'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:588:in `invoke_prerequisites'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:585:in `each'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:585:in `invoke_prerequisites'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:577:in `invoke_with_call_chain'
/usr/lib64/ruby/1.8/monitor.rb:242:in `synchronize'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:571:in `invoke_with_call_chain'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:564:in `invoke'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2027:in `invoke_task'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2005:in `top_level'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2005:in `each'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2005:in `top_level'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2044:in `standard_exception_handling'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:1999:in `top_level'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:1977:in `run'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2044:in `standard_exception_handling'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:1974:in `run'
/usr/lib64/ruby/gems/1.8/gems/rake-0.8.4/bin/rake:31
/usr/bin/rake:19:in `load'
/usr/bin/rake:19
11
задан Matthew 13 February 2010 в 01:13
поделиться

3 ответа

Причина этой ошибки - двойное исключение. Обычно что-то в вашем коде дает сбой, что вызывает первоначальное исключение. Затем пользовательская настройка Rails требует попыток сохранить пространство имен в чистоте путем удаления частично определенных констант, что и является целью метода new_constants_in . Проблема в том, что new_constants_in неправильно обрабатывает некоторую конкретную конструкцию где-то внутри кода, я подозреваю, из-за неправильной обработки пространств имен модулей или чего-то еще (потому что ClassMethods, вероятно, находится внутри какого-то модуля, отличного от Object). В любом случае, я не отследил ошибку компонента Rails или чего-то еще, потому что, честно говоря, это не стоит усилий.

Решение (не считая предложения чего-то менее агрессивного для ядра Rails) - это быстрый способ выяснить, что вызвало исходное исключение. Все, что вам нужно сделать, это перейти туда, где вызывается Dependencies.new_constants_in , и прокомментировать его (есть несколько мест, где это могло быть). Так, например:

def require(file, *extras) #:nodoc:
  if Dependencies.load?
    Dependencies.new_constants_in(Object) { super }
  else
    super
  end
rescue Exception => exception  # errors from required file
  exception.blame_file! file
  raise
end

Закомментируйте материал new_constants_in :

def require(file, *extras) #:nodoc:
#  if Dependencies.load?
#    Dependencies.new_constants_in(Object) { super }
#  else
    super
#  end
#rescue Exception => exception  # errors from required file
#  exception.blame_file! file
#  raise
end

Тогда вы сразу увидите свою ошибку.

15
ответ дан 3 December 2019 в 02:19
поделиться

Сегодня я тоже начал замечать эту странную ошибку - проследил ее до устаревшего гема mysql.

Я только что переключился с использования пакета Mac MySQL (тот, который поставляется с PrefPane) на версию, скомпилированную Homebrew, и старый / usr / local / mysql задерживался в моем PATH

Удаление этого каталога ( и другие следы старого MySQL), а затем повторное объединение моего приложения решило это!

0
ответ дан 3 December 2019 в 02:19
поделиться

Я снова столкнулся с этой проблемой. После некоторой отладки я пришел к такому выводу: эта странная ошибка означает, что у Rails есть проблемы с требованием какой-то конкретной библиотеки. Проблема в том, что Rails не сообщает нам, какая библиотека вызывает проблему. Итак, первый шаг, который вам нужно сделать, это следующее:

Откройте этот файл (или соответствующий файл в вашей установке): /u/app/releases/20100213003957/vendor/rails/activesupport/lib/active_support/dependencies.rb

и отредактируйте метод load_with_new_constant_marking так, чтобы он выглядел так:

def load_with_new_constant_marking(file, *extras) #:nodoc:
  if Dependencies.load?
    Dependencies.new_constants_in(Object) { load_without_new_constant_marking(file, *extras) }
  else
    load_without_new_constant_marking(file, *extras)
  end
rescue Exception => exception  # errors from loading file
    puts "FAILS HERE: " + file
    exception.blame_file! file
    raise
end

С этого момента, когда вместо того, чтобы просто сообщать вам, что оно «не может удалить Object :: ClassMethods», запускает ваше приложение или задачу Rails, Rails сообщит вам, какой файл вызывает проблему (просто найдите оператор «FAILS HERE»). (Между прочим. Я полагаю, это то, что должен делать метод exception.blame_file! , но он явно не работает.)

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

Надеюсь, это поможет.

2
ответ дан 3 December 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: