грабли прерваны неинициализированной константой "Компьютеры" - PullRequest
7 голосов
/ 21 февраля 2012

У меня очень неприятная проблема с миграциями.

Первое сообщение об ошибке:

bundle exec rake db:migrate --trace
(in /home/myhomefolder/msdnaa)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
An error has occurred, all later migrations canceled:

uninitialized constant Computers

Теперь у меня есть предположение, что обновление, сделанное одним из наших администраторов, является причиной, по которой это происходит каждый раз. Даже если вообще нет миграций!

Что я сделал (кроме поиска решения по переполнению стека), так это grep каждого файла для «Компьютеры». Конечно, есть некоторые файлы, содержащие это слово, и я проверил их на наличие синтаксических ошибок и обычного материала, например, пропущенного ":". Затем я попросил помощника по работе (он гораздо лучше разбирается в рубине, чем я), и он понятия не имеет, все выглядит правильно.

Я использую немного старую версию Ruby (1.8.7) и Rails (3.0.9), но у меня нет прав на обновление на нашем сервере, поэтому мне приходится иметь дело с этим. И да, я попросил администратора сделать обновление до 1.9.x и 3.1.x, но это не может быть ошибкой, потому что на прошлой неделе все работало нормально. Так что это одна из тех ошибок, где она ДОЛЖНА работать, но это не так, и я уверен, что решение легко, как питьевая вода, но я этого не вижу!

Есть предложения?

РЕДАКТИРОВАТЬ: Вот - трассировка -

/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/inflector/meth               ods.rb:113:in `constantize'
/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/inflector/meth               ods.rb:112:in `each'
/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/inflector/meth               ods.rb:112:in `constantize'
/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/core_ext/strin               g/inflections.rb:43:in `constantize'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:407               :in `load_migration'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:402               :in `migration'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:397               :in `migrate'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:539               :in `migrate'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:615               :in `call'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:615               :in `ddl_transaction'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:538               :in `migrate'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:525               :in `each'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:525               :in `migrate'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:435               :in `up'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:417               :in `migrate'
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/railties/databas               es.rake:142
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:205:in `call'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:205:in `execute'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:200:in `each'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:200:in `execute'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:158:in `invoke_with_call_               chain'
/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:151:in `invoke_with_call_               chain'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:144:in `invoke'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:112:in `invoke_tas               k'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:90:in `top_level'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:90:in `each'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:90:in `top_level'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_e               xception_handling'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:84:in `top_level'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:62:in `run'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_e               xception_handling'
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:59:in `run'
/var/lib/gems/1.8/gems/rake-0.9.2/bin/rake:32
/var/lib/gems/1.8/bin/rake:19:in `load'
/var/lib/gems/1.8/bin/rake:19
Tasks: TOP => db:migrate

Ответы [ 2 ]

22 голосов
/ 21 февраля 2012

Полагаю, вы только что добавили миграцию, которая называется что-то вроде 20120221123456_computers.rb, и внутри нее вы видите что-то вроде ...

class SomeNameThatsNotComputers < ActiveRecord::Migration
  ...

Когда Rails выполняет миграцию, он ожидает выполнения файла, который определяет класс, а затем создает экземпляр класса и вызывает #up или #down для этого экземпляра класса. Как Rails знает, какой класс создавать? Предполагается, что он соответствует части имени файла, следующей за числовым префиксом и подчеркиванием, поэтому для имени файла, например 20120221123456_computers.rb, имя класса должно быть Computers.

0 голосов
/ 21 февраля 2012

Как вы сказали, grep сообщает, что проблема заключается в существовании "компьютеров".Это означает, что компьютеры не определены, но привыкают.Миграция сначала загружает среду приложения, но в этот момент она не работает bcoz Компьютеры не инициализированы

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