Rails staging环境说“未定义的方法”,但控制台显示该方法很好

时间:2009-10-15 21:20:24

标签: ruby-on-rails deployment staging

之前有人发生过这种情况吗?我刚刚将我的应用程序上传到与生产服务器完全相同的登台服务器。我尝试登录,然后我得到了“Something going wrong”500页。日志告诉我错误在我的SessionsController中(使用restful_authentication),特定错误为NoMethodError (undefined method 'enabled?' for #<User:0xb6c5dbd4>):。我为我的暂存环境加载一个控制台并撤回有问题的用户...并且定义了启用的方法(调用user.enabled?返回预期值,而不是no方法错误。)

有人有什么想法吗?我在Passenger中指定RailsEnv应该进行升级;可能是乘客没有意识到这一点吗?当我创建我的数据库并运行我的迁移时,我必须明确说RAILS_ENV=staging,否则它会尝试加载开发数据并抛出错误,因为我的开发框通过不同的MySQL套接口连接而不是分段生成。 / p>

启用的方法在我的users表中定义,因此在User模型中定义。控制器中的代码是这样的:

# 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,并且登台服务器基本上是从Production克隆的(因此它上面有一个旧版本的应用程序)。出于某种原因,当我从Capistrano部署并重新启动Passenger时,它似乎没有正确链接到新版本;我尝试删除已启用的行,我能够登录,但是拉出一条记录会给我另一个未定义的方法 - 有问题的方法是在创建Staging服务器之后添加的。

0 个答案:

没有答案