Closed guenterh closed 5 years ago
@witzigs Hallo Silvia,
habe als Morgengymnastik zu Beginn ein wenig mit MySQL herumgespielt (lokal bei mir). Warum ich nicht kontextsensitiv suchen kann, ist mir immer noch nicht klar. Ich habe die verschiedensten collation ausprobiert. Aber: internationalization ist ein Thema für sich...
Was ich jedoch machen konnte: Mit einem Update statement, scheint MySQL in der Lage zu sein, context sensitiv die richtigen rows 'herauszufischen'. Als Beipiele:
mysql> update user set language = 'en' where language = 'en'; Query OK, 65 rows affected (0.06 sec) Rows matched: 1370 Changed: 65 Warnings: 0
mysql> update user set language = 'fr' where language = 'fr'; Query OK, 0 rows affected (0.05 sec) Rows matched: 189 Changed: 0 Warnings: 0
mysql> update user set language = 'it' where language = 'it'; Query OK, 0 rows affected (0.05 sec) Rows matched: 64 Changed: 0 Warnings: 0
mysql> update user set language = 'de' where language = 'de'; Query OK, 0 rows affected (0.05 sec) Rows matched: 11228 Changed: 0 Warnings: 0
Es gibt 65 'falsche Engländer' diese werden gefunden und aktualisiert. Die anderen Sprachen sind ok. Ich denke man kann den Update auf der produktiven Datenbank machen. Dann würden die Fehler nicht mehr auftreten und Du hättest erstmal weniger Telefone ... Was hälst Du davon?
Günter
Hallo Günter
Am daily vergssen - das ist von mir aus in Ordnung.
Liebe Grüsse Silvia
UNIVERSITÄT BASEL Universitätsbibliothek Silvia Witzig IT / Verbundkoordination Schönbeinstrasse 18-20 4056 Basel, Schweiz Tel. +41 (0)61 267 29 44 Tel. +41 (0)61 267 30 95 E-Mail silvia.witzig@unibas.ch URL http://www.ub.unibas.ch/bibliotheksnetz
Von: Guenter Hipler [notifications@github.com] Gesendet: Donnerstag, 10. Dezember 2015 08:35 An: swissbib/vufind Cc: Silvia Witzig Betreff: Re: [vufind] falscher Sprachcode En in table user (#398)
@witzigshttps://github.com/witzigs Hallo Silvia,
habe als Morgengymnastik zu Beginn ein wenig mit MySQL herumgespielt (lokal bei mir). Warum ich nicht kontextsensitiv suchen kann, ist mir immer noch nicht klar. Ich habe die verschiedensten collation ausprobiert. Aber: internationalization ist ein Thema für sich...
Was ich jedoch machen konnte: Mit einem Update statement, scheint MySQL in der Lage zu sein, context sensitiv die richtigen rows 'herauszufischen'. Als Beipiele:
mysql> update user set language = 'en' where language = 'en'; Query OK, 65 rows affected (0.06 sec) Rows matched: 1370 Changed: 65 Warnings: 0
mysql> update user set language = 'fr' where language = 'fr'; Query OK, 0 rows affected (0.05 sec) Rows matched: 189 Changed: 0 Warnings: 0
mysql> update user set language = 'it' where language = 'it'; Query OK, 0 rows affected (0.05 sec) Rows matched: 64 Changed: 0 Warnings: 0
mysql> update user set language = 'de' where language = 'de'; Query OK, 0 rows affected (0.05 sec) Rows matched: 11228 Changed: 0 Warnings: 0
Es gibt 65 'falsche Engländer' diese werden gefunden und aktualisiert. Die anderen Sprachen sind ok. Ich denke man kann den Update auf der produktiven Datenbank machen. Dann würden die Fehler nicht mehr auftreten und Du hättest erstmal weniger Telefone ... Was hälst Du davon?
Günter
— Reply to this email directly or view it on GitHubhttps://github.com/swissbib/vufind/issues/398#issuecomment-163523852.
auf produktiver DB gemacht mysql> update user set language = 'en' where language = 'en'; Query OK, 65 rows affected (0.10 sec) Rows matched: 1370 Changed: 65 Warnings: 0
wenn der Fehler wieder auftritt, hat sich ein neues Em eingeschlichen.
Punkt 1 schaue ich mir noch an.
@guenterh Kannst du dir das nochmals anschauen oder zumindest wieder die "En"-Einträge bereinigen? Ich erhalte wieder Meldungen von NutzerInnen die sich darauf zurückführen lassen. Danke!
@witzigs mache ich morgen.
@witzigs ich bin mir ziemlich sicher, dass ich die Beschreibung des Vorgehens, was ich gemacht habe, in einem Mail geschickt oder auf das Wiki gestellt habe Hast Du das noch oder weisst Du den Ort, wo ich das hingestellt habe? Sorry und Danke! Günter
@witzigs sorry, bin ziemlich blöde, ein paar Kästchen darüber steht es ja... Günter
@witzigs Habe es gerade in der Pause gemacht Database changed mysql> update user set language = 'en' where language = 'en'; Query OK, 30 rows affected (0.13 sec) Rows matched: 1650 Changed: 30 Warnings: 0 (Basel / Bern)
mysql> update user set language = 'en' where language = 'en'; Query OK, 694 rows affected (0.08 sec) Rows matched: 4134 Changed: 694 Warnings: 0 (green)
Database changed mysql> update user set language = 'en' where language = 'en'; Query OK, 0 rows affected (0.00 sec) Rows matched: 6 Changed: 0 Warnings: 0 (Jus)
Was mir durch den Kopf geht
Günter
Die temporären Sessions werden neu per Script jede Nacht gelöscht. Dies sollte dazu führen, dass die obenstehende Fehlermeldung nicht mehr auftritt. Issue wird auf Grund von Günters Anpassung im Script geschlossen.
@edelm hallo matthias, können wir im nächsten scrum bitte diesen issue nochmals gemeinsam ansehen? Bei mir dauert es im Moment immer etwas länger, bis ich mir wieder eine komplette laufähige Umgebung aufgebaut habe.
Konkret bin ich jetzt wieder durch einen issue gestossen, den wir über den feedback - channel erhalten haben (s. swissbib-ub mail) subject Fehlermeldung.
Ich schicke Dir die Einträge der Person in unserer Datenbank per Mail. Die Person hat erstellt sich mit switchEduId einen neuen account (Browsersprache Englisch). Dadurch wird bei ihr als Sprache "En" eingetragen was falsch ist. (Richtig en).
Den Fehler erhielt sie dan bei der Anmeldung, weil ein Sprachtemplate nicht gefunden wurde. In Ihrem Fall habe ich das auf die Schnelle "gelöst", indem ich einen Pfad kopiert habe.
vfsb@sb-uvf1:/usr/local/vufind/httpd/themes$ find . -name 'en'
./sbvfrdsingle/templates/HelpPage/en
./sbvfrdsingle/templates/search/homeElements/en
./root/templates/HelpTranslations/en
./sbvfrdjus/templates/HelpPage/en
./sbvfrdjus/templates/search/homeElements/en
./sbvfrdmulti/images/HelpPage/en
./sbvfrdmulti/templates/HelpPage/en
./sbvfrdmulti/templates/search/homeElements/en
vfsb@sb-uvf1:/usr/local/vufind/httpd/themes$ find . -name 'En'
./sbvfrdsingle/templates/search/homeElements/En
vfsb@sb-uvf1:/usr/local/vufind/httpd/themes$
Silvia sagt mir, dass der Fehler nicht nur hier sondern auch zum Beispiel bei der Exemplaranzeige auftritt. Hintergrund dort wohl: Bei der Übersetzung wird der Sprachcode En nicht gefunden.
Was wir tun sollten (gerne gemeinsam)
In unserem log finden wir für das konkrete Problem der Person, mit der ich telefoniert habe, folgenden Fehler: 2019-02-15T09:57:30+01:00 CRIT (2): Zend\View\Exception\RuntimeException : Zend\View\Renderer\PhpRenderer::render: Unable to render template "search/homeElements/En/swissbib_content_1"; resolver could not resolve to a file
@liowalter z.I.
@liowalter @edelm @witzigs Hallo zusammen, ich habe mich des Problems heute erneut angenommen, nachdem ich es geschafft hatte, ein VuFind fast fehlerfrei lokal zum Laufen zu bekommen. Um die login Vorgänge besser nachvollziehen zu können, habe ich von der produktiven green-prod Datenbank den dump des Datenbankschemas erstellt und bei mir lokal geladen. Dadurch kann ich meinen (Aleph)-Testuser sehr einfach immer wieder neu vom Bibliothekssystem abrufen und kann einfacher nachvollziehen, welche Werte in welchen Schritten in die Datenbank geschrieben werden.
Wen das Szenario interessiert: Das Schema ist eingecheckt. db schema @liowalter @edelm : ich würde die alten Sachen (vor allem VF4) an Eurer Stelle wegwerfen.
Zur Sache: Ich konnte bisher nicht nachvollziehen, an welcher Stelle der language code falsch in die datenbank geschrieben wird. Was ich bisher gesehen habe: Bei der Neuanlage eine Benutzers ist das Feld language lange Zeit leer. Erst bei einem Sprachwechsel (Sprachauswahl an oberen Rand) wird der englische code "richtig" in die Datenbank geschrieben (en und nicht En)
Mit Silvia habe ich ein wenig über Ursachen/Möglichkeiten diskutiert:
Die Lösungen können den Nachteil haben, dass man evtl. VuFind Code nur für diesen Zweck überschreiben muss.
Weitere Ideen?
MySQL case sensitive searches can be done when cast to BINARY :
SELECT * FROM `user` WHERE BINARY `language` = BINARY "EN"
or
SELECT language, count(*)
FROM user
GROUP BY CAST(language as BINARY);
As a result, we get for udb1 (at 16h33 on April 24) :
language | count(*) |
---|---|
47279 | |
Du | 7 |
Ge | 3 |
da | 6 |
de | 5704 |
en | 9492 |
fr | 1277 |
ge | 228 |
it | 379 |
on udb2 :
language | count(*) |
---|---|
70363 | |
Ge | 1 |
de | 32510 |
en | 3711 |
fr | 553 |
it | 149 |
{l | 1 |
On orange, the Ge and {| are old entries. I have fixed them. I have the feeling the problem only happens on green.
All "Du" (which doesn't exist as a locale) and "da" (danish) entries are after a login with the unisg IdP.
The "Ge" entries are old entries.
"ge" (georgian, but probably rather a typo for german) is the worst problem. It seems to affect all IdP.
I have the feeling that Swissbib Bootstrapper could be the reason of the error : https://github.com/swissbib/vufind/blob/master/module/Swissbib/src/Swissbib/Bootstrapper.php#L176
Thanks for you work Lionel, that looks very likely!
I could reproduce the error :
On top of that, I removed all the wrong language codes from green and orange db. On jus, everything was fine. After deployment, we can remove the cronjobs on udb1 and udb2.
In der Tabelle user colums language haben sich Sprachcodes eingeschlichen, die nicht erlaubt sind. So wie wir das in der produktiven Datenbank von BB gesehen haben, handelt es sich dabei ausschliesslich um Englisch. Deutsch, Französisch und Italienisch scheinen in Ordnung zu sein.
Der falsche Sprachcode: En richtig wäre: en
Dies führt zu folgenden Fehlern:
Unter anderem sind folgende Fragen zu beantworten
@witzigs fyi - bitte nachführen, wenn ich etwas vergessen habe