У меня есть незавершенный проект, который разработчик просто не закончил и не оставил никакой документации о процессе установки. Я загрузил производственный каталог на свой компьютер с Windows (на котором запущен InstantRails 2), я создал базы данных в соответствии с требованиями в database.yml и попытался запустить rake:db:migrate --trace, но получаю следующее сообщение об ошибке:
(in D:/projects/broke2)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
uninitialized constant Admin
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:279:in `load_missing_constant'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:468:in `const_missing'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:480:in `const_missing'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/inflector.rb:285:in `constantize'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/inflector.rb:284:in `each'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/inflector.rb:284:in `constantize'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/core_ext/string/inflections.rb:143:in `constantize'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:481:in `migrations'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/connection_adapters/mysql_adapter.rb:15:in `inject'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:465:in `each'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:465:in `inject'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:465:in `migrations'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:431:in `migrate'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:373:in `up'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:356:in `migrate'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/tasks/databases.rake:99
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `call'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `execute'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `each'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `execute'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:578:in `invoke_with_call_chain'
D:/InstantRails-2.0-win/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:571:in `invoke_with_call_chain'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:564:in `invoke'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2019:in `invoke_task'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `top_level'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `each'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `top_level'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2036:in `standard_exception_handling'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1991:in `top_level'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1970:in `run'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2036:in `standard_exception_handling'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1967:in `run'
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/bin/rake:31
D:/InstantRails-2.0-win/ruby/bin/rake:19:in `load'
D:/InstantRails-2.0-win/ruby/bin/rake:19
Я обычный разработчик Rails (это не мое первое приложение), но я никогда не видел этой ошибки и понятия не имею, с чего начать отладку.





Я бы сказал, что ваша проблема в части uninitialized constant Admin вашей проблемы миграции. Вы пытались найти, где инициализируется Admin, и указать путь к нему, где бы вы его ни использовали? (Кроме того, каково содержание задачи rake, которую вы выполняете?)
Иногда Rails выдает эту ошибку, если есть синтаксическая ошибка, в которой определен Admin.
Попробуйте найти admin.rb и убедитесь, что он разбирается.
Кроме того, вы можете попробовать запускать миграции по очереди (rake db:migrate VERSION=1 и т. д.), Чтобы увидеть, поможет ли это отследить, какая миграция вызывает ошибку, или, если это проблема, просто загрузите приложение.
Это не указывает мне, где у меня есть константа администратора. Есть способ хоть где посмотреть? мои модели, мои контроллеры и т. д.?
rake db: migrate VERSION = 1, уже выдает ошибку. Как я уже сказал, я просто пытаюсь закончить проект, незаконченный другим парнем.
Как я могу сделать файл миграции для каждого файла?
С уважением,
Виктор
это странно. у меня есть 001_admin.rb, но нет модели администратора. в моем 001_admin.rb он пытается писать в классе Default .. имеет смысл?
в любом случае я исправил. я просто переименовал файл в 001_default.rb и работал.
Я подозреваю, что у вас была миграция, при которой была создана таблица и добавлены некоторые данные с использованием модели. Позже в проекте модель была переименована или удалена (как, может быть, таблица?). Поскольку модели больше не существовало, миграции не запускались, но никто этого не заметил, поскольку к тому моменту они выполняли только несколько миграций за раз, а не из чистой базы данных.
Урок здесь ... если вы переименуете модели или таблицы (или обновите их проверки и поля), тогда проверьте, что ваши миграции выполняются с нуля, а также в текущей производственной версии.
Вы можете попробовать загрузить схему сразу, а не выполнять каждую миграцию:
rake db: schema: load
Как сказал RichH, могло быть изменение схемы, не отраженное в миграциях.
Сделайте резервную копию своей базы данных, затем полностью удалите ее и попробуйте перейти на VERSION = 1. Тогда VERSION = 2 и т. д. Константа Admin, вероятно, является моделью. Есть ли в вашем приложении файл с именем admin.rb?