1

有人以前有过这种情况吗?我刚刚将我的应用程序上传到与生产服务器相同的登台服务器。我尝试登录,但出现“出现问题”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 时,它似乎没有正确链接到新版本;我尝试删除启用的行并且我能够登录,但是拉起记录给了我另一个未定义的方法 - 有问题的方法是在创建登台服务器后添加的。

4

0 回答 0