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 组织的。登录页面正常,注册页面抛出此错误。

一切都很顺利,直到我更改了数据库中的一个字段(与设计无关)(更改类型 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 文件中的设计部分(好的,我做了,但在那之后我也重新启动了应用程序,一切都很好)。

这是我的模型/user.rb 设计部分:

devise :database_authenticatable, :registerable

我确信这是一个悲惨的问题,也许是其他东西的错误输入,一个非常小的讨厌的错误,但我无法想象它会是什么......我已经找了两天了,但我没有不知道去哪里找。请人帮忙!

我已经尝试过以下方法:

  • 回到之前版本的db/schema.rb,并重置DB;
  • 降级到整个rails应用程序的上一个版本;
  • 移动 app/controllers/registrations_controller.rb 到 app/controllers/devise 和 app/controllers/registrations 目录;
  • 将设计宝石从 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

(虽然当时没有帮助)

然后,更新之前降级(在寻找错误期间)设计到最新的 1.4.2 版本

$ bundle update

然后这一切都有帮助。我认为(尽管我不明白为什么)文件的所有者应该与 httpd 进程的所有者相同(检查$ ps aux | grep httpd)。

希望它会帮助某人

于 2011-08-11T12:06:56.257 回答