1

誰もこれが前に起こったことがありますか?本番サーバーと同じステージング サーバーにアプリをアップロードしました。ログインしようとすると、「問題が発生しました」という 500 ページが表示されます。ログは、エラーが私の SessionsController (restful_authentication を使用) にあることを示しており、特定のエラーはNoMethodError (undefined method 'enabled?' for #<User:0xb6c5dbd4>):. ステージング環境用のコンソールをロードし、問題のユーザーを引き戻します...有効なメソッドが定義されます (呼び出しuser.enabled?は、メソッド エラーではなく、期待される値を返します)。

誰にもアイデアはありますか?Passenger で、RailsEnv をステージングする必要があることを指定しました。Passenger がこれを認識していない可能性はありますか? データベースを作成して移行を実行したとき、明示的にRAILS_ENV=staging.

有効なメソッドは us​​ers テーブルで定義されているため、 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 を使用しており、ステージング サーバーは基本的に本番環境から複製されたものです (そのため、古いバージョンのアプリケーションがインストールされていました)。Capistrano からデプロイして Passenger を再起動すると、何らかの理由で新しいバージョンに正しくリンクしていないようです。有効な行を削除してみましたが、ログインできましたが、レコードをプルすると、別の未定義のメソッドが表示されます。問題のメソッドは、ステージング サーバーの作成後に追加されたものです。

4

0 に答える 0