PnX-SI / GeoPaysages

Application web permettant de publier un observatoire photographique des paysages
GNU General Public License v3.0
12 stars 9 forks source link

Database codage ? #56

Closed camillemonchicourt closed 5 years ago

camillemonchicourt commented 5 years ago

Je viens d'installer GeoPaysages 1.0.0-rc.3.7 sur un serveur Debian 9.9.

Quand j'essaie d'ouvrir la BDD avec pgadmin j'ai ce message :

Codage de la base de données

_La base de données geopaysages a été créé pour stocker des données dans le codage SQLASCII. Ce codage est seulement défini pour les caractères sur sept bits ; la signification des caractères dont le huitième bit est positionné (caractères non ASCII allant de 127 à 255) n'est pas définie. En conséquence, il n'est pas possible pour le serveur de convertir les données vers d'autres codages.

_Si vous stockez des données non ASCII dans la base, vous êtes fortement encouragé à utiliser un bon codage représentant la locale de votre ensemble de caractères pour retrouver le bénéfice des conversions automatiques vers les différents codages client si nécessaire. Si vous stockez des données non ASCII dans une base de données SQLASCII, vous pouvez rencontrer des problèmes avec des caractères étranges écrit ou lu depuis la base de données, problèmes causés par des soucis de conversion de code. Ceci pourrait vous amener beaucoup de problèmes en accédant à la base de données avec des programmes clients et des pilotes différents.

Pour la grande majorité des installations, le codage Unicode (UTF8) apportera la plus grande flexibilité.

Je ne sais pas si c'est normal et souhaitable. Et j'ai l'impression que cela occasionne d'autres problèmes.

camillemonchicourt commented 5 years ago

En effet dans le fichier /var/log/geopaysages/geopaysages.err.log, j'ai pas mal d'erreurs liés à l'encodage ascii :

...
Traceback (most recent call last):
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask_cors/extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/geopaysages/geopaysages/backend/api.py", line 104, in returnAllThemes
    return jsonify(error=exception), 400
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/json/__init__.py", line 321, in jsonify
    dumps(data, indent=indent, separators=separators) + '\n',
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/json/__init__.py", line 179, in dumps
    rv = _json.dumps(obj, **kwargs)
  File "/usr/lib/python3.5/json/__init__.py", line 237, in dumps
    **kw).encode(obj)
  File "/usr/lib/python3.5/json/encoder.py", line 198, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode
    return _iterencode(o, 0)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/json/__init__.py", line 81, in default
    return _json.JSONEncoder.default(self, o)
  File "/usr/lib/python3.5/json/encoder.py", line 179, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: UnicodeDecodeError('ascii', b'Am\xc3\xa9nagements - Travaux - Infrastructures', 2, 3, 'ordinal not in range(128)') is not JSON serializable
[2019-05-16 14:24:48,833] ERROR in app: Exception on /api/subThemes [GET]
Traceback (most recent call last):
  File "/home/geopaysages/geopaysages/backend/api.py", line 110, in returnAllSubthemes
    get_all_subthemes = models.DicoStheme.query.all()
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2703, in all
    return list(self)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/orm/loading.py", line 90, in instances
    util.raise_from_cause(err)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 187, in reraise
    raise value
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/orm/loading.py", line 71, in instances
    fetch = cursor.fetchall()
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/engine/result.py", line 1125, in fetchall
    self.cursor, self.context)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1405, in _handle_dbapi_exception
    util.reraise(*exc_info)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 187, in reraise
    raise value
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/engine/result.py", line 1119, in fetchall
    l = self.process_rows(self._fetchall_impl())
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/sqlalchemy/engine/result.py", line 1070, in _fetchall_impl
    return self.cursor.fetchall()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask_cors/extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/geopaysages/geopaysages/backend/api.py", line 120, in returnAllSubthemes
    return jsonify(error=exception), 400
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/json/__init__.py", line 321, in jsonify
    dumps(data, indent=indent, separators=separators) + '\n',
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/json/__init__.py", line 179, in dumps
    rv = _json.dumps(obj, **kwargs)
  File "/usr/lib/python3.5/json/__init__.py", line 237, in dumps
    **kw).encode(obj)
  File "/usr/lib/python3.5/json/encoder.py", line 198, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode
    return _iterencode(o, 0)
  File "/home/geopaysages/geopaysages/venv/lib/python3.5/site-packages/flask/json/__init__.py", line 81, in default
    return _json.JSONEncoder.default(self, o)
  File "/usr/lib/python3.5/json/encoder.py", line 179, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: UnicodeDecodeError('ascii', b'Am\xc3\xa9nagement des domaines skiables', 2, 3, 'ordinal not in range(128)') is not JSON serializable
camillemonchicourt commented 5 years ago

Bon OK, mon serveur n'avait pas de locales définies.... Je vais refaire l'installation en le définissant bien en UTF-F8...

dpkg-reconfigure locales

camillemonchicourt commented 5 years ago

C'était bien un problème de locales non configurées sur mon serveur.