Подтвердить что ты не робот

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>'

Где... (эллипсис) - специально вырезанный аналогичный код. Все это. Буду признателен за любую помощь!

4b9b3361

Ответ 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