Undefined метод raise_in_transactional_callbacks = 'для ActiveRecord:: Base: Class (NoMethodError)
Прежде чем писать этот вопрос, я посмотрел на эти ответы, но не смог найти решение.
Ошибка при выполнении rails-генерации эскиза Имя пользователя: строка email: строка
рейк прерван! undefined метод `migration_error = 'для ActiveRecord:: Base: Class
Ошибка запуска сервера Rails: undefined метод 'configure'
Когда я пытаюсь запустить новое приложение (для Hartl tutorial, глава 2), на старте этапа запуска я получил ошибку, например:
**undefined method `configure' for #<SampleApp2::Application:0x00000101a74610> (NoMethodError)**
Но благодаря приведенным выше примерам я редактировал файл development.rb:
DemoApp::Application.configure do
(Да, мое приложение называется demo_app, поэтому я изменил его имя).
После этого я снова попытался запустить эшафот, но получил новую ошибку:
**method_missing': undefined method raise_in_transactional_callbacks=' for ActiveRecord::Base:Class (NoMethodError)**
В ответ на подобные случаи указывается способ миграции - его следует удалить из файла development.rb. Аналогично, я попытался найти в этом файле метод raise_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>'
Где... (эллипсис) - специально вырезанный аналогичный код.
Все это. Буду признателен за любую помощь!
Ответы
Ответ 1
Ваш config/application.rb
имеет следующую строку:
config.active_record.raise_in_transactional_callbacks = true
Это недопустимое значение конфигурации в вашей версии Rails. Вам нужно будет удалить его или закомментировать, чтобы продолжить.
Примечание: эта ошибка и та, которая произошла, указывают на неполное изменение версии Rails. Если вы находитесь на ранних этапах обучения, вы можете серьезно подумать о перезапуске приложения, используя предпочитаемую версию Rails с самого начала. Это поможет вам избежать ошибок такого типа, пока вы не ознакомитесь с технологией.
Ответ 2
У меня была такая же проблема при обновлении приложения с Rails 5.0.1 до Rails 5.1.0.beta1.
При запуске сервера (rails s
) появляется следующее сообщение об ошибке:
/home/user01/.rvm/gems/[email protected]/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...
Ответ 3
Если вы не видите config.active_record.raise_in_transactional_callbacks = true
в config/application.rb
, он может существовать в ваших настройках среды. Для моего приложения это было установлено в config/environments/development.rb
и config/environments/test.rb