Неопределенный метод повышение_в_транзакции_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

Другие вопросы по тегам