誰もこれが前に起こったことがありますか?本番サーバーと同じステージング サーバーにアプリをアップロードしました。ログインしようとすると、「問題が発生しました」という 500 ページが表示されます。ログは、エラーが私の SessionsController (restful_authentication を使用) にあることを示しており、特定のエラーはNoMethodError (undefined method 'enabled?' for #<User:0xb6c5dbd4>):
. ステージング環境用のコンソールをロードし、問題のユーザーを引き戻します...有効なメソッドが定義されます (呼び出しuser.enabled?
は、メソッド エラーではなく、期待される値を返します)。
誰にもアイデアはありますか?Passenger で、RailsEnv をステージングする必要があることを指定しました。Passenger がこれを認識していない可能性はありますか? データベースを作成して移行を実行したとき、明示的にRAILS_ENV=staging
.
有効なメソッドは 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 を使用しており、ステージング サーバーは基本的に本番環境から複製されたものです (そのため、古いバージョンのアプリケーションがインストールされていました)。Capistrano からデプロイして Passenger を再起動すると、何らかの理由で新しいバージョンに正しくリンクしていないようです。有効な行を削除してみましたが、ログインできましたが、レコードをプルすると、別の未定義のメソッドが表示されます。問題のメソッドは、ステージング サーバーの作成後に追加されたものです。