Почему ошибка сервера в производстве, а не в разработке?

поэтому меня интересует ошибка сервера, которая возникает только в производстве (когда приложение идентично между производством и разработкой).

Итак, используя Flask-Admin, я отображаю базовый интерфейс CRUD с представлениями модели, которые в основном полагаются на метод модели __repr__ для предоставления удобочитаемой строки в представлении списка. В рабочей среде (новое приложение, те же данные, что и в dev) я получаю сообщение об ошибке сервера, когда метод __repr__ непреднамеренно делает что-то глупое. В разработке такое же глупое поведение игнорируется или остается незамеченным.

Например:

МОДЕЛЬ:

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__() в этом случае вызывает ошибку ТОЛЬКО на сервере (который является wsgi на apache), когда имя, отчество или фамилия равны NULL. Он пытается объединить NULL и String с соединением и, таким образом, вызывает некоторый вариант «ожидаемая строка, полученная NULL».

Но на сервере разработки я никогда не вижу этих ошибок (и никаких предупреждений).

С тех пор я изменил этот метод repr, чтобы проверить имя, отчество и фамилию перед конкатенацией, но я не понимаю, почему ошибка возникает в производстве (приложение wsgi), а не в разработке (сервер flask dev или сервер cherrypi). ).

Итак, есть идеи? Чем отличаются эти две ситуации?


person Christopher Alexander Campbell    schedule 05.04.2017    source источник
comment
Используете ли вы разные базы данных? Вероятно, они по-разному обрабатывают пустые или null строки.   -  person Wombatz    schedule 06.04.2017
comment
функция .join() принимает один аргумент, в вашем случае вы даете 3   -  person dimmg    schedule 06.04.2017
comment
Итак, оба бэкэнда — sqlite — и я проверил это, используя один и тот же файл базы данных, когда у меня появились подозрения.   -  person Christopher Alexander Campbell    schedule 06.04.2017


Ответы (1)


У меня была аналогичная проблема. Я решил это странно, преобразовав NULL в None.

Например, я создаю функцию, которая вызывается во всех представлениях и преобразует все значения NULL в тип None. Таким образом, как в разработке, так и в производстве все работало безупречно.

Я также использовал сервер flask dev в разработке и wsgi и apache2 в производстве...

Почему это сработало, я не могу вам сказать!

person Ktk    schedule 07.04.2017
comment
Я так и не понял, почему, просто собираюсь назначить это Flask Magic и жить дальше, ИМАО. - person Christopher Alexander Campbell; 19.04.2017