2

非常に奇妙な問題が発生しました。これは、実稼働環境 (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で構成されています。サインイン ページは問題ありませんが、サインアップ ページでこのエラーがスローされます。

データベースのフィールドの 1 つ (Devise とは関係ありません) を変更し (型を int -> bigint に変更)、db/schema.rb と db/migrations/20110412205837_rename_files.rb をアップロードするまで、すべてがうまくいきました。次に、データベースをリセットします

$ rake db:setup RAILS_ENV='production'

、でアプリを再起動しました

$ touch tmp/restart.txt

、新しいユーザーとしてサインアップしようとしました-そして、その不幸なエラーページとログファイルに NoMethodError レポートが表示されました。models/user.rb ファイルのデバイス セクションは変更しませんでした (OK、変更しましたが、その後アプリを再起動したところ、すべて問題ありませんでした)。

これが私の models/user.rb デバイス セクションです。

devise :database_authenticatable, :registerable

これは悲惨な問題だと確信しています。おそらく何か他のタイプミス、非常に小さな厄介なバグですが、それが何であるか想像できません.2日間探していましたが、見つかりませんでした.他にどこを見るべきかわかりません。助けてください!

私はすでに次のことを試しました:

  • 以前のバージョンの db/schema.rb に戻し、DB をリセットしました。
  • Rails アプリ全体を以前のバージョンにダウングレードしました。
  • app/controllers/registrations_controller.rb を app/controllers/devise および app/controllers/registrations ディレクトリに移動しました。
  • Devise gem を 1.1.7 から 1.1.2 にダウングレード。
  • Passenger、Apache、および FreeBSD 全体を再起動しました。
  • /var/log/httpd.log および /var/log/httpd_error.log ファイルを調べました。
  • データベースを再作成しました。
  • MySQL ユーザーと許可を確認して再作成しました。
  • バンドルの更新;

何も役に立たない...

他に何ができますか?なぜこの問題が発生したのですか?

事前にご意見をお寄せいただきありがとうございます。

4

2 に答える 2

10

この痛みを経験している他の人にとっては、あなたが私のように愚かで忘れていた可能性があります。

# app/models/user.b
devise :registerable

あなたのモデルで。

于 2014-11-12T20:52:10.460 に答える
0

アプリディレクトリ全体の所有者をwwwに変更しました

$ chown -R www data

(しかし、その時点では役に立ちませんでした)

次に、以前にダウングレードされた(バグハント中に)Deviseを最新の1.4.2バージョンに更新します。

$ bundle update

その後、それはすべて役に立ちました。私は(理由はわかりませんが)ファイルの所有者はhttpdプロセスの所有者と同じ所有者である必要があると思います(で確認してください$ ps aux | grep httpd)。

うまくいけば、それは誰かを助けるでしょう

于 2011-08-11T12:06:56.257 に答える