Rails / Devise - NoMethodError (неопределенный метод new_with_session 'для # <класса: 0x2b2a4e34>) - PullRequest
2 голосов
/ 08 августа 2011

У меня очень странная проблема, которая возникла довольно неожиданно во время тестирования / исправления ошибок в моей производственной среде (FreeBSD / Apache / Passenger / MySQL):

$ tail log/production.log

Started GET "/users/sign_up" for 192.168.5.7 at 2011-08-06 21:37:53 +0400
  Processing by Devise::RegistrationsController#new as
  SQL (1.5ms)  SHOW TABLES
Completed   in 15ms

NoMethodError (undefined method `new_with_session' for #<Class:0x2b2a4e34>):
  app/controllers/registrations_controller.rb:71:in `build_resource'
  app/controllers/registrations_controller.rb:8:in `new'

Управление пользователями организовано с помощью Devise gem,Страница входа в порядке, страница регистрации выдает эту ошибку.

Все прошло очень хорошо, пока я не изменил одно из полей (не связанных с Devise) в базе данных (изменил тип int -> bigint) и загрузилdb / schema.rb и db / migrations / 20110412205837_rename_files.rb.Затем я сбросил базу данных с помощью

$ rake db:setup RAILS_ENV='production'

, перезапустил приложение с помощью

$ touch tmp/restart.txt

, попытался зарегистрироваться как новый пользователь - и затем увидел страницу с несчастными ошибками и отчет NoMethodErrorв лог-файл.Я не изменял раздел devise в файле models / user.rb (хорошо, я сделал, но я также перезапустил приложение, и все было в порядке).

Вот мой dev models / user.rbраздел:

devise :database_authenticatable, :registerable

Я уверен, что это жалкая проблема, может быть опечатка чего-то другого, очень маленькая неприятная ошибка, но я не могу себе представить, что это может быть ... Яискал его два дня и не знаю где еще искать.Пожалуйста, помогите людям!

Я уже попробовал следующее:

  • Вернулся к предыдущей версии db / schema.rb и сбросил БД;
  • Понижено до предыдущей версии всего приложения rails;
  • Перемещено app / controllers / registrations_controller.rb в каталог app / controllers / devise и app / controllers / registrations;
  • Понижен гем Devise с 1.1.7 до 1.1.2;
  • Перезапущен Пассажир, Apache и весь FreeBSD;
  • заглянул в / var / log / httpd.файлы журнала и /var/log/httpd_error.log;
  • воссоздал базу данных;
  • проверил и воссоздал пользователей и привилегии MySQL;
  • Обновление пакета;

Ничего не помогает ...

Что еще я могу сделать?Почему появилась эта проблема?

ОЧЕНЬ большое спасибо за любой вклад!

Ответы [ 2 ]

6 голосов
/ 12 ноября 2014

Для всех, кто испытывает эту боль, есть вероятность, что вы были так же глупы, как и я, и забыли включить:

# app/models/user.b
devise :registerable

в вашу модель.

0 голосов
/ 11 августа 2011

Я сменил владельца всего каталога приложений на www

$ chown -R www data

(хотя в тот момент это не помогло)

Затем, обновленный ранее пониженный (во время поиска ошибок) Разработка до последней версии 1.4.2 с

$ bundle update

Тогда все это помогло. Я думаю (хотя я не понимаю, почему), что владельцем файлов должен быть тот же владелец, что и владельцем процесса httpd (проверьте с помощью $ ps aux | grep httpd).

Надеюсь, это кому-нибудь поможет

...