Неопределенный метод повышение_в_транзакции_callbacks='для ActiveRecord::Base:Class (NoMethodError)
Прежде чем написать этот вопрос, я посмотрел на эти ответы, но не смог найти решение.
Ошибка при выполнении рельсов генерирует скаффолд Имя пользователя: строка электронная почта: строка
грабли прерваны! undefined метод `igration_error='для ActiveRecord::Base:Class
Ошибка запуска сервера Rails: неопределенный метод 'configure'
Когда я пытаюсь запустить новое приложение (для учебника Хартла, глава 2), при запуске скаффолда я получаю сообщение об ошибке:
**undefined method `configure' for #<SampleApp2::Application:0x00000101a74610> (NoMethodError)**
Но благодаря приведенным выше примерам я отредактировал файл development.rb:
DemoApp::Application.configure do
(Да, мое приложение называется demo_app, поэтому я изменил его название).
После этого я снова попытался запустить scaffold, но получил новую ошибку:
**method_missing': undefined method raise_in_transactional_callbacks=' for ActiveRecord::Base:Class (NoMethodError)**
В ответ на подобные случаи указывается метод миграции - что его следует удалить из файла development.rb. Точно так же я пытался найти в этом файле метод rise_in_transactional_callbacks, но его там нет! Кроме того, я бы сказал, что полный код, который выдает в cmd, очень большой:
C:\Sites\demo_app>rails generate scaffold User name:string email:string
invoke active_record
C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-4.0.2/lib/active_record/dynamic_matchers.rb:22:in `method_missing': undefined method `raise_in_transactional_callbacks=' for ActiveRecord::Base:Class (NoMethodError)
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-4.0.2/lib/active_record/railtie.rb:166:in `block (3 levels) in <class:Railtie>'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-4.0.2/lib/active_record/railtie.rb:165:in `each'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-4.0.2/lib/active_record/railtie.rb:165:in `block (2 levels) in <class:Railtie>'
…
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-4.0.2/lib/rails/commands.rb:48:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
Где то...(многоточие) - специально вырезать похожий код. Это все. Буду благодарен за любую помощь!
2 ответа
Ваш config/application.rb
имеет следующую строку:
config.active_record.raise_in_transactional_callbacks = true
Это недопустимое значение конфигурации в вашей версии Rails. Вам нужно будет удалить его или закомментировать, чтобы продолжить.
Примечание: эта ошибка и та, которая произошла, указывают на неполное изменение версии Rails. Если вы находитесь на ранних этапах обучения, вы можете серьезно подумать о перезапуске приложения, используя предпочитаемую версию Rails с самого начала. Это поможет вам избежать ошибок такого типа, пока вы не ознакомитесь с технологией.
У меня была такая же проблема при обновлении приложения с Rails 5.0.1 до Rails 5.1.0.beta1.
При запуске сервера (rails s
), Я получил следующее сообщение об ошибке:
/home/user01/.rvm/gems/ruby-2.4.0@global/gems/activerecord-5.1.0.beta1/lib/active_record/dynamic_matchers.rb:22:in `method_missing': undefined method `raise_in_transactional_callbacks=' for ActiveRecord::Base:Class (NoMethodError)
Те же болезни, те же лекарства.
Комментируя следующую строку, в config/application.rb
, решил вопрос...
config.active_record.raise_in_transactional_callbacks = true
После некоторых исследований я обнаружил, что эта строка была по умолчанию в Rails 4.2.1, исчезла в Rails 5.0.0 и теперь вызывает ошибку в Rails 5.1.0.beta1...
Если вы не видите config.active_record.raise_in_transactional_callbacks = true
в config/application.rb
он может существовать в конфигурациях вашей среды. Для моего приложения он устанавливался вconfig/environments/development.rb
а также config/environments/test.rb