Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[beta 15.5.1] L'API est kaputt => erreur 500 #2753

Closed
firm1 opened this issue May 26, 2015 · 43 comments
Closed

[beta 15.5.1] L'API est kaputt => erreur 500 #2753

firm1 opened this issue May 26, 2015 · 43 comments
Labels
Bloquant Ticket qui doit être traité avant la prochaine mise à jour C-API Concerne une API du site S-Régression Corrige un problème sur un composant qui fonctionnait auparavant
Milestone

Comments

@firm1
Copy link
Contributor

firm1 commented May 26, 2015

Url incriminée : http://beta.zestedesavoir.com/api/membres/

On obtient une erreur 500. Ce problème a donc plusieurs conséquences diverses et variées et plus ou moins embettantes. Telles que :

  • L'autocomplémention ne fonctionne plus nulle part sur le site
  • La doc de l'API ne fonctionne plus
  • Une erreur 500 c'est jamais jolie

NB : l'erreur survient en mode connecté ou non.

Il s'agit donc pour moi d'une regression, mais je ne saurais dire si c'est de l'infra ou du back. Dans le doute je taggue serré.

@firm1 firm1 added S-Régression Corrige un problème sur un composant qui fonctionnait auparavant C-API Concerne une API du site labels May 26, 2015
@GerardPaligot GerardPaligot added the Bloquant Ticket qui doit être traité avant la prochaine mise à jour label May 29, 2015
@GerardPaligot
Copy link
Member

C'est en tout cas bloquant mais je comprends pas comment c'est possible alors qu'il n'y a eu aucune modification sur l'API des membres depuis des semaines, voire des mois.

@Eskimon
Copy link
Contributor

Eskimon commented May 29, 2015

Il faudrait vraiment que l'outil de monitoring qui nous remontait les erreurs reviennent en vie.

@SpaceFox
Copy link
Contributor

Si quelqu'un a un serveur… personnellement je n'ai pus le temps ni la
patience de déboguer Sentry.
Le 29 mai 2015 18:56, "Eskimon" notifications@github.com a écrit :

Il faudrait vraiment que l'outil de monitoring qui nous remontait les
erreurs reviennent en vie.


Reply to this email directly or view it on GitHub
#2753 (comment)
.

@DevHugo
Copy link
Contributor

DevHugo commented May 30, 2015

J'ai pas le souci en local, donc c'est uniquement sur la plateforme de beta.

@GerardPaligot
Copy link
Member

Est-ce que @firm1 ou @SpaceFox peuvent nous fournir la stacktrace de la bêta ? Je suis tenté de rajouter le tag "infra" puisque nous ne parvenons pas à reproduire en local.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 4, 2015

Voila la stacktrace, c'est la même erreur que pour la désinscription non ?

[ERROR] -- 2015-06-04 11:20:58,904 -- base : Internal Server Error: /api/membres/
Traceback (most recent call last):
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 57, in wrapped_view
    return view_func(*args, **kwargs)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/rest_framework/views.py", line 452, in dispatch
    response = self.handle_exception(exc)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/rest_framework/views.py", line 440, in dispatch
    self.initial(request, *args, **kwargs)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/rest_framework/views.py", line 354, in initial
    self.perform_authentication(request)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/rest_framework/views.py", line 292, in perform_authentication
    request.user
  File "/opt/zdsenv/local/lib/python2.7/site-packages/rest_framework/request.py", line 491, in __getattribute__
    return super(Request, self).__getattribute__(attr)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/rest_framework/request.py", line 266, in user
    self._authenticate()
  File "/opt/zdsenv/local/lib/python2.7/site-packages/rest_framework/request.py", line 454, in _authenticate
    user_auth_tuple = authenticator.authenticate(self)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/oauth2_provider/ext/rest_framework/authentication.py", line 18, in authenticate
    valid, r = oauthlib_core.verify_request(request, scopes=[])
  File "/opt/zdsenv/local/lib/python2.7/site-packages/oauth2_provider/oauth2_backends.py", line 135, in verify_request
    valid, r = self.server.verify_request(uri, http_method, body, headers, scopes=scopes)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/oauthlib/oauth2/rfc6749/endpoints/base.py", line 64, in wrapper
    return f(endpoint, uri, *args, **kwargs)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/oauthlib/oauth2/rfc6749/endpoints/resource.py", line 75, in verify_request
    return token_type_handler.validate_request(request), request
  File "/opt/zdsenv/local/lib/python2.7/site-packages/oauthlib/oauth2/rfc6749/tokens.py", line 280, in validate_request
    token, request.scopes, request)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/oauth2_provider/oauth2_validators.py", line 217, in validate_bearer_token
    token=token)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 351, in get
    num = len(clone)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 122, in __len__
    self._fetch_all()
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 966, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 265, in iterator
    for row in compiler.results_iter():
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 701, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 787, in execute_sql
    cursor.execute(sql, params)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute
    return self.cursor.execute(sql, params)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute
    return self.cursor.execute(sql, params)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 129, in execute
    return self.cursor.execute(query, args)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
    self.errorhandler(self, exc, value)
  File "/opt/zdsenv/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
OperationalError: (1054, "Unknown column 'oauth2_provider_application.skip_authorization' in 'field list'")

@GerardPaligot
Copy link
Member

Tout à fait et comme pour la désinscription, je pense que le souci se situe côté infra du serveur de bêta. D'autant plus que @DevHugo a vérifié et il n'a pas le problème en local.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 4, 2015

je pense que le souci se situe côté infra du serveur de bêta

Du genre ? Requirements pas a jour ? BDD pas migrate ? Il y a des choses simples que je peux tester ?

@DevHugo
Copy link
Contributor

DevHugo commented Jun 4, 2015

Quelque truc sur le sujet:

Comme ça, je dirais requirements pas à jours.

2015-06-04 11:34 GMT+02:00 Eskimon notifications@github.com:

je pense que le souci se situe côté infra du serveur de bêta

Du genre ? Requirements pas a jour ? BDD pas migrate ? Il y a des choses
simples que je peux tester ?


Reply to this email directly or view it on GitHub
#2753 (comment)
.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 4, 2015

Nop j'ai vérifié:

$ pip show django-oauth-toolkit
---
Name: django-oauth-toolkit
Version: 0.8.1

@DevHugo
Copy link
Contributor

DevHugo commented Jun 4, 2015

Les migrations alors ?

@Eskimon
Copy link
Contributor

Eskimon commented Jun 4, 2015

C'est là que le bât blesse, j'ai peut de tenter un python manage.py migrate et de mettre en vrac la BDD :D

@DevHugo
Copy link
Contributor

DevHugo commented Jun 4, 2015

Fait pas ça, si ça marche pas, je vais me sentir coupable =)

@DevHugo
Copy link
Contributor

DevHugo commented Jun 4, 2015

Tu peux tenter un manage.py migrate --list

@Eskimon
Copy link
Contributor

Eskimon commented Jun 4, 2015

Bien vu...

$ python manage.py migrate --list
admin
 [X] 0001_initial
article
 [X] 0001_initial
auth
 [X] 0001_initial
contenttypes
 [X] 0001_initial
default
 [X] 0001_initial
 [X] 0002_add_related_name
 [X] 0003_alter_email_max_length
easy_thumbnails
 [X] 0001_initial
 [X] 0002_thumbnaildimensions
forum
 [X] 0001_initial
 [X] 0002_auto_20150410_1505
gallery
 [X] 0001_initial
 [X] 0002_auto_20150409_2122
member
 [X] 0001_initial
mp
 [X] 0001_initial
 [X] 0002_auto_20150416_1750
oauth2_provider
 [ ] 0001_initial
pages
 (no migrations)
sessions
 [X] 0001_initial
sites
 [X] 0001_initial
tutorial
 [X] 0001_initial
utils
 [X] 0001_initial

@DevHugo
Copy link
Contributor

DevHugo commented Jun 4, 2015

/o/

@Eskimon
Copy link
Contributor

Eskimon commented Jun 4, 2015

Du coup en mode fifou je lance le migrate ou pas #jesuissurderien @SpaceFox tu en penses quoi (et le cas échéant faudra noter ca quelque part)

@GerardPaligot
Copy link
Member

Attendons l'avis de @SpaceFox mais de toute façon, nous sommes sur le serveur de bêta. Dans tous les cas, c'est pas dramatique.

@GerardPaligot GerardPaligot added the C-Infra Concerne l'infrastructure technique sous le site label Jun 4, 2015
@Eskimon
Copy link
Contributor

Eskimon commented Jun 4, 2015

Ouai c'est pas dramatique mais si on peut éviter de devoir remettre une BDD sur pied depuis un backup c'est aussi bien

@Eskimon
Copy link
Contributor

Eskimon commented Jun 5, 2015

Du coup @SpaceFox on peut tenter de mettre cette migration ??

@Eskimon
Copy link
Contributor

Eskimon commented Jun 15, 2015

Faut qu'on avance, je ferais la migration dans l’après midi pour voir ce qui se passe. @SpaceFox il faudra remplir un document qque part pour le suivi ? Car normalement ce truc se fait automatiquement lors des maj non ?

@SpaceFox
Copy link
Contributor

Oui, c'est fait automatiquement.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 15, 2015

Du coup on a une idee de pourquoi l'initiale de oauth2_provider n'est pas passée ?

@artragis
Copy link
Member

j'ai tendance à penser qu'on un mis un "fake" devant celle-ci comme pour les thumbnail?

@Eskimon
Copy link
Contributor

Eskimon commented Jun 15, 2015

j'ai tendance à penser qu'on un mis un "fake" devant celle-ci comme pour les thumbnail?

C'est a dire ? (notamment "pourquoi on aurait fait ca" et "de quoi les thumbnails ?"

@artragis
Copy link
Member

la lib easythumbnails étant de base compatible django 1.7, lorsqu'il y a eu migration, la doc nous a dit de mettre un --fake pour migrer cette application là. Il se peut que par erreur, par extrapolation ou encore par choix technique on ait fait la même chose pour les oauth-provider.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 15, 2015

Bon j'ai tente de faire la migration qui manque en faisant python manage.py migrate oauth2_provider ou python manage.py migrate oauth2_provider 0001_initial mais dans un cas comme dans l'autre j'ai le droit a une stacktrace qui se finit par django.db.utils.OperationalError: (1050, "Table 'oauth2_provider_application' already exists")

Des idées ?

@artragis
Copy link
Member

fake it.

(en fait mon assertion était dans le mauvais sens) python manage.py migrate --fake oauth2_provider

2015-06-15 11:46 GMT+02:00 Eskimon notifications@github.com:

Bon j'ai tente de faire la migration qui manque en faisant python
manage.py migrate oauth2_provider ou python manage.py migrate
oauth2_provider 0001_initial mais dans un cas comme dans l'autre j'ai le
droit a une stacktrace qui se finit par django.db.utils.OperationalError:
(1050, "Table 'oauth2_provider_application' already exists")

Des idées ?


Reply to this email directly or view it on GitHub
#2753 (comment)
.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 15, 2015

mais si je la fake du coup j'aurais toujours le souci original non ? (probleme de colonne inexistante)

@Eskimon Eskimon removed the C-Infra Concerne l'infrastructure technique sous le site label Jun 15, 2015
@Eskimon
Copy link
Contributor

Eskimon commented Jun 15, 2015

Bon j'ai trouve sur la preprod' (je ne peux pas verifier en prod').

  1. On utilise plus South depuis Django 1.7
  2. On a 3 migrations via South pour oauth et une (initial) pour "non-south django 1.7"
  3. La migration south numero 3 est cense (entre autre) creer la colonne qui fait bugguer l'affaire
  4. Une fois cette migration faite, on pourra fake la migration initial non-south je pense

Question : Comment executer une migration South quand on utilise plus South...

@Eskimon
Copy link
Contributor

Eskimon commented Jun 15, 2015

(Au passage, ce souci vient de la mise à jour de django-oauth-toolkit

-django-oauth-toolkit==0.7.2
+django-oauth-toolkit==0.8.1

Cette mise à jour à été faite dans le but d'avoir toutes nos dépendances à jour proprement. Un moyen simple de contourner le souci temporairement serait de revenir en arrière sur la version de ce package.

@DevHugo
Copy link
Contributor

DevHugo commented Jun 15, 2015

C'est possible de créé la colonne à la main ?

Edit:

Voila les trois solutions officielle:

  1. Migrate your databases using South and then fake the initial migration.
  2. Otherwise you can provide your own custom migrations for DOT as documented
    here
  3. Or you can add the column manually with a script and then fake the initial migration.

Le 15 juin 2015 17:49, Eskimon notifications@github.com a écrit :

(Au passage, ce souci vient de la mise à jour de django-oauth-toolkit

-django-oauth-toolkit==0.7.2
+django-oauth-toolkit==0.8.1

Cette mise à jour à été faite dans le but d'avoir toutes nos dépendances à
jour proprement. Un moyen simple de contourner le souci temporairement
serait de revenir en arrière sur la version de ce package.


Reply to this email directly or view it on GitHub
#2753 (comment)
.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 15, 2015

  • La solution 1 me plait personnellement, mais comment qu'on fait ?
  • La solution 2 me semble hors de propos
  • La 3 me semble un bon "dernier recours pourquoi pas si c'est pas trop chaud"

@Eskimon
Copy link
Contributor

Eskimon commented Jun 16, 2015

Je trouve 0 doc/explication pour lancer une migration South spécifique lorsqu'on est passé a Django 1.7.
Du coup la solution 3 me semble la seule restante... Cela signifie qu'il faut reussir a me pondre le SQL qui execute ceci:

# Adding field 'Application.skip_authorization'
db.add_column(u'oauth2_provider_application',
              'skip_authorization',
              self.gf('django.db.models.fields.BooleanField')(default=False),
              keep_default=False)


# Changing field 'AccessToken.user'
db.alter_column(u'oauth2_provider_accesstoken',
                'user_id',
                self.gf('django.db.models.fields.related.ForeignKey')(to=orm['%s.%s' % (User._meta.app_label, User._meta.object_name)],
                null=True))

@artragis
Copy link
Member

ALTER TABLE oauth2_provider_application ADD COLUMN skip_authorization
TINYINT NOT NULL DEFAULT 0;
ALTER TABLE oauth2_provider_accesstoken ADD CONSTRAINT
fk_user_oauth2_provider_accesstoken FOREIGN KEY(user_id) REFERENCES(
auth_user.id);

2015-06-16 8:50 GMT+02:00 Eskimon notifications@github.com:

Je trouve 0 doc/explication pour lancer une migration South spécifique
lorsqu'on est passé a Django 1.7.
Du coup la solution 3 me semble la seule restante... Cela signifie qu'il
faut reussir a me pondre le SQL qui execute ceci:

Adding field 'Application.skip_authorization'

db.add_column(u'oauth2_provider_application',
'skip_authorization',
self.gf('django.db.models.fields.BooleanField')(default=False),
keep_default=False)

Changing field 'AccessToken.user'

db.alter_column(u'oauth2_provider_accesstoken',
'user_id',
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['%s.%s' % (User._meta.app_label, User._meta.object_name)],
null=True))


Reply to this email directly or view it on GitHub
#2753 (comment)
.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 16, 2015

Si tu es sur de toi je lance la manœuvre en mode copie/colle en preprod et consigne ca dans le update.md si tout marche

@artragis
Copy link
Member

Je suis sûr de moi pour la première. Pour la seconde, je fais "ce qui demande le moins de
noeuds au cerveau" mais c'est pas "certain".

Le 16 juin 2015 09:25, Eskimon notifications@github.com a écrit :

Si tu es sur de toi je lance la manœuvre en mode copie/colle en preprod et
consigne ca dans le update.md si tout marche


Reply to this email directly or view it on GitHub
#2753 (comment)
.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 16, 2015

La premiere passe bien mais pas la seconde, je regarde mais si tu as vois pourquoi hesite pas !

mysql> ALTER TABLE oauth2_provider_application ADD COLUMN skip_authorization TINYINT NOT NULL DEFAULT 0;
Query OK, 16 rows affected (0.02 sec)
Records: 16  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE oauth2_provider_accesstoken ADD CONSTRAINT fk_user_oauth2_provider_accesstoken FOREIGN KEY(user_id) REFERENCES(auth_user.id);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(auth_user.id)' at line 1

@artragis
Copy link
Member

Oui je vois pourquoi :

ALTER TABLE oauth2_provider_accesstoken ADD CONSTRAINT fk_user_oauth2_provider_accesstoken FOREIGN KEY(user_id) REFERENCES auth_user(id);

CF ici

2015-06-16 10:08 GMT+02:00 Eskimon notifications@github.com:

La premiere passe bien mais pas la seconde, je regarde mais si tu as vois
pourquoi hesite pas !

mysql> ALTER TABLE oauth2_provider_application ADD COLUMN skip_authorization
TINYINT NOT NULL DEFAULT 0;
Query OK, 16 rows affected (0.02 sec)
Records: 16 Duplicates: 0 Warnings: 0

mysql> ALTER TABLE oauth2_provider_accesstoken ADD CONSTRAINT
fk_user_oauth2_provider_accesstoken FOREIGN KEY(user_id)
REFERENCES(auth_user.id);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use
near '(auth_user.id)' at line 1


Reply to this email directly or view it on GitHub.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 16, 2015

:D je lisais la même chose a l'instant :D

et BOUUUUMMMMM tout remarche !!

Je fais la PR de suite pour informer de la démarche a faire :) Gros merci a tous !!

@artragis
Copy link
Member

Bientôt le lancement de la v15.06 alors!

Le 16 juin 2015 10:17, Eskimon notifications@github.com a écrit :

:D je lisais la même chose a l'instant :D

et BOUUUUMMMMM tout remarche !!

Je fais la PR de suite pour informer de la démarche a faire :) Gros merci
a tous !!


Reply to this email directly or view it on GitHub
#2753 (comment)
.

@Eskimon
Copy link
Contributor

Eskimon commented Jun 16, 2015

Et voila, PR lancée !! (et moi j'ai level up sur ma "prise de confiance sur la preprod" :D )

@pierre-24 pierre-24 added this to the Version de développement milestone Jun 16, 2015
@pierre-24
Copy link
Member

Et c'est mergé !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bloquant Ticket qui doit être traité avant la prochaine mise à jour C-API Concerne une API du site S-Régression Corrige un problème sur un composant qui fonctionnait auparavant
Projects
None yet
Development

No branches or pull requests

7 participants