2017-04-05 15 views
0

ですので、本番環境でのみ発生するサーバーエラーについては疑問に思っています(アプリケーションは本番環境と開発環境で同じです)。プロダクションでサーバーエラーが発生していますが、開発中ではないのはなぜですか?

Flask-Adminを使用して、基本的なCRUDインターフェイスを表示します。モデルビューはモデルの__repr__メソッドにほとんど依存しており、リストビューに読み込み可能な文字列を提供します。プロダクション(新しいアプリケーション、devと同じデータ)では、__repr__メソッドが誤って何か愚かなことをすると、サーバーエラーが発生します。開発中、同じ愚かな振る舞いは無視されるか、気付かれません。例えば

MODEL:この場合

class Author(db.Model): 
    first_name = db.Column(db.String(50), nullable=True) 
    middle_name = db.Column(db.String(50), nullable=True) 
    last_name = db.Column(db.String(50), nullable=True) 
    # ... 

    def __repr__(): 
     return '{}'.format(' '.join([self.first_name, self.middle_name, self.last_name])) # EDITED: Checked repository and I did have the arguments correct -- just wrote this off the top of my head. 

__repr __()は(apacheの上WSGIである)ONLYサーバでエラーが発生したときに最初の名前、ミドルネーム、または最後nameはNULLです。それはNULLとStringをjoinで連結しようとします。したがって、 "expected string、got NULL"のいくつかのバリエーションが発生します。

しかし、開発サーバーでは、これらのエラー(または警告)が表示されることはありません。

私は以来、連結の前に名字、ミドルネーム、ラストネームをチェックするためにこのreprメソッドを変更しましたが、私は生産(wsgiアプリケーション)でエラーが発生しましたが、サーバーまたはチェリーパイサーバー)。

だから、どんなアイデアですか? 2つの状況の違いは何ですか?

+0

異なるデータベースバックエンドを使用していますか?おそらく空文字列や 'null'文字列を別々に扱います。 – Wombatz

+0

'.join()'関数は1つの引数をとります。3 – dimmg

+0

だから、両方のバックエンドはsqliteです。疑わしいときに同じデータベースファイルを使ってテストしました。 –

答えて

1

私も同様の問題がありました。私はNULLをNoneに変換することで不思議に解決しました。

たとえば、すべてのビューで呼び出され、すべてのNULL値をNone型に変換する関数を作成します。開発と生産の両方でその方法は完璧に機能しました。

I開発とWSGIや生産でのapache2でも使用フラスコのdevのサーバー...それは私はあなたを伝えることはできません働いていたのはなぜ

+0

私は、なぜこれを "Flask Magic"に割り当てて、私の人生、lmaoに移って行くのか分かりませんでした。 –

関連する問題