有人以前有过这种情况吗?我刚刚将我的应用程序上传到与生产服务器相同的登台服务器。我尝试登录,但出现“出现问题”500 页面。日志告诉我错误在我的 SessionsController 中(使用 restful_authentication),具体错误是NoMethodError (undefined method 'enabled?' for #<User:0xb6c5dbd4>):
. 我为我的登台环境加载了一个控制台并拉回有问题的用户......并且定义了启用的方法(调用user.enabled?
返回预期值,而不是无方法错误)。
有人有想法么?我在Passenger 中指定了RailsEnv 应该暂存;乘客可能没有意识到这一点吗?当我创建我的数据库并运行我的迁移时,我必须明确地说RAILS_ENV=staging
,否则它会尝试加载开发数据并引发错误,因为我的开发盒通过与 staging|production 不同的 MySQL 套接字连接。
启用的方法是在我的用户表上定义的,因此是在用户模型上定义的。控制器中的代码是这样的:
# SessionsController.rb
def create
user = User.authenticate(params[:username], params[:password)
if user
unless user.enabled?
note_disabled_account # basically prints a message
else
self.current_user = user
# other stuff
redirect_back_or_default('/')
end
end
end
代码在生产中是相同的并且工作正常,所以这个问题与我创建了一个“登台”环境的事实有关。
编辑: 尽管我已经重新启动了Passenger,但我已将错误缩小为某种缓存问题。我们使用的是 Amazon EC2,暂存服务器基本上是从生产环境中克隆出来的(所以它上面有旧版本的应用程序)。由于某种原因,当我从 Capistrano 部署并重新启动Passenger 时,它似乎没有正确链接到新版本;我尝试删除启用的行并且我能够登录,但是拉起记录给了我另一个未定义的方法 - 有问题的方法是在创建登台服务器后添加的。