ããã¿ããªã å®å®çã䜿çšããŠãããäžéšã®ããããã©ã³ãã ã«æ©èœãåæ¢ããã³ã³ãœãŒã«ã§ãã£ãããããªããšã©ãŒãã¹ããŒãããšããåé¡ããããŸãã
Uncaught Error: Failed assertion: Invalid changeset (checkRep failed)
äŸïŒ
https://etherpad.tugraz.at/p/l3tsbet
ãããçºçãããšããèªã¿èŸŒã¿äžãã®ãªãŒããŒã¬ã€ããã¹ãŠã®ã¢ã¯ã·ã§ã³ããããã¯ããŸãã å®å šã«ææžãã®ãããã§çºçããããšããããããã³ããŒïŒããŒã¹ãã®åé¡ã«ãªãå¯èœæ§ã¯ã»ãšãã©ãããŸããã
èå³æ·±ãã®ã¯ãã¿ã€ã ã¹ã©ã€ããŒïŒURLã«/ timesliderãè¿œå ããŠéãïŒãåžžã«åé¡ãªãæ©èœããããšã§ãã
https://etherpad.tugraz.at/p/l3tsbet/timeslider
çŸåšãHTMLã§ãšã¯ã¹ããŒã+ã€ã³ããŒãããããšã§ããããæåã§ä¿®æ£ããŠããŸãïŒãã¹ãŠã®ãã§ã³ãžã»ããã倱ããŸãïŒã äœãæªãã®ãèããŠããŸããïŒ
ææ°ã®Developãã©ã³ããè©ŠããŠãããããŸã çºçãããã©ããããç¥ãããã ãã
ããã¯ãå€ãã®ãŠãŒã¶ãŒãããprodãµãŒããŒã§å¶ç¶ã«çºçããåçŸã§ããªããããç°¡åã§ã¯ãããŸããã
å£ããããããéçºæã«å£ãããŸãŸã§ãããã©ããããã¹ãã§ããã®ã¯ãããã圹ç«ã€å Žåã ãã§ãã
ã¯ãããé¡ãããŸã
æ¥é±ãdbãdevã«ã³ããŒããŸãã ã§ããã ãæ©ãå ±åããŸãã è¿ éãªå¯Ÿå¿ããããšãããããŸãã
æ®å¿µãªãããéçºã«ç§»è¡ããŠããæå·ãããããã¯ä¿®åŸ©ãããŠããŸããã èå³æ·±ãããšã«ããµãŒããŒã®ç§»åïŒåçŽãªSQLãšã¯ã¹ããŒã/ã€ã³ããŒãïŒã«ããããããã®1ã€ãã修埩ããããŸããã æ°ãããµãŒããŒïŒ1.3.0ã§ãïŒã§åäœããŸãããä»ã®ãã¡ãŒãžãããã¯åäœããŸããã ããã§ãåããšã©ãŒã
ããã¯æ¬åœã«å¥åŠãªãã°ã§ããããããã¯PRODã§ããèªå·±ä¿®åŸ©ãããŠããããã«èŠããç§ãã¡ããäœã®å€æŽããããŸããã
çè«çã«ã¯ããã®åé¡ã¯ãŸã£ããçºçããªãã¯ãã§ããæªãããŒã¿ãä»ã§ã¯ãã®æ¹æ³ãèŠã€ããããšãã§ããªãããã§ãã
ããã¯éãããŸãŸã«ããŠããããšãã§ããæ°ããããŒã¿ã§çºçããå Žåã¯ã解決ãè©Šã¿ãããšãã§ããŸãã
ãæ°é®®ãªããŒã¿ããšã¯ã©ãããæå³ã§ããïŒ PRODãéçºã«æå ¥ããŠãæ°ããå£ããããããå ¥æããå¿ èŠããããŸããïŒ
ããŒããããã¯æœåšçã«çã¿ã䌎ãã§ããã..å€åæ倧æ°é±éã§åºãã¯ãã®1.4ãåŸ ã€ã§ãããã
ç§ãã¡ã¯ããããããããããŸããã ã©ããããããšãã
ç§ãåãå¥åŠãªã©ã³ãã æ§ã§ãã®åé¡ãæ±ããŠããŸãã ç§ã¯etherpad-lite1.4ã«ã¢ããããŒãããŸãããããŸã ããã«ãããŸãã ãããã®1ã€ã®URL http://etherpad.usabilidoido.com.br 8080 / P / 07318a9b2b5666637d870fc50656323620af4df4ïŒ
çŸåšã1.4ã«ã¢ããã°ã¬ãŒãããŠãããæ°ããããŒãžã§ã³ã§çšŒåã§ããããã«ãªã£ãŠããããšãé¡ã£ãŠããŸããæ°ããããŒãžã§ã³ã§å®è¡ããåŸãæ°ãããããã«æ°ããæ¬ é¥ãçºçãããã©ããã確èªã§ããŸãã
@usabilidoidoãããããšã¯ã¹ããŒã-ã€ã³ããŒãããããã«ãŠãŒã¶ãŒã«æ瀺ã§ããŸãã 次ã®ããã«URLã«/ timesliderãè¿œå ããããšã§ãã³ã³ãããŒã«ã«ã¢ã¯ã»ã¹ã§ããŸãïŒ http ïŒ//etherpad.usabilidoido.com.brïŒ8080 / p / 07318a9b2b5666637d870fc50656323620af4df4 / timeslider
HTMLãšããŠãšã¯ã¹ããŒãããŠãããæ°ãããããã«ã€ã³ããŒãããŸãã
1.4ã§ãã®åé¡ãçºçããŠããŸãã å£ãããããã§ã¯ããã©ãŠã¶ã«Failed assertion
ãšã©ãŒã衚瀺ããããšãã³ãã³ãã©ã€ã³ã«[WARN] client - Uncaught TypeError: Cannot read property 'length' of undefined
ã衚瀺ãããŸãã
/ timesliderã®åé¿çã«ã€ããŠã¯ã @ Ra1d3nãžã®ãã³ããã芧ãã ããã ãããã®ã³ã³ãã³ãããŸã ããã«ã¢ã¯ã»ã¹ã§ããã®ãèŠãŠããããã§ãã
ããã¯åãªãäºæã§ãããå¿
èŠã«å¿ããŠãå
ã»ã©äœæããå®éšçãªtry/client-init-remove-checkRep
ãã©ã³ããè©ŠããŠã¿ãŠãã ããã ïŒããã¯äžè¬çã«å±éºãªããšã§ãããè©ŠããŠã¿ã䟡å€ã¯ãããšæããŸããïŒ
ãã¹ãŠã1.4ã«ã¢ããã°ã¬ãŒãããŸããã ãããŠæšæ¥ãç§ãã¡ã¯åã³å£ããããããæã£ãŠããŸããã æŽæ°åã«å£ãããã®ãããããŸããããããããããŸããã ç§ã¯æ¢ãç¶ããŸãã
@marcelklehræ®å¿µãªãããæ¬çªãµãŒããŒã_dangerous_ããŒãžã§ã³ã«ç§»åããããšã¯ã§ããŸããã ãŸãããªãœãŒã¹ããªãããããªã¯ãšã¹ããã»ã«ã³ããªãµãŒããŒã«ãã©ãŒãªã³ã°ã§ããŸããã ïŒ-/
ç³ãèš³ãããŸããããã¯ã£ããããŸããtry/client-init-remove-checkRep
ããæ¬çªç°å¢ã§ã¯
å Žåã«ãã£ãŠã¯æ£èŠåãæ£ããæ©èœããªãå¯èœæ§ãããããããã®ãã©ã³ãã®checkRep
ãåé€ããŸããã ãããã£ãŠãå£ãããããããã®ãã©ã³ãã§ãŸã£ããåé¡ãªãæ©èœããå Žåã¯ããã®æ¹æ³ãåæ€èšããå¿
èŠããããŸãã
@marcelklehrãã£ãã°ããã§ãããæ®å¿µãªãã圹ã«ç«ã¡ãŸããã§ããã
åŠçããïŒ
git fetch
git checkout try/client-init-remove-checkRep
git status
On branch try/client-init-remove-checkRep
Your branch is up-to-date with 'origin/try/client-init-remove-checkRep'.
å€æŽãå®éã«ãã¡ã€ã«ã·ã¹ãã ã«ããããšã確èªããŸããã ïŒã³ã¡ã³ããšæ¹è¡ããããŸãïŒãšã©ãŒã¯åãã§ãã
@ericpediaãèšåãããšã©ãŒãçºçããŸããããç Žæããããã以å€ã§ã¯çºçããŸããã§ããã
ãµãŒããŒäžã®ã³ã³ãœãŒã«ïŒ
[2014-05-09 16:55:39.152] [WARN] client - Uncaught TypeError: Cannot read property 'length' of undefined -- { errorId: 'dTtndCRA5gonLZyvMlqw',
msg: 'Uncaught TypeError: Cannot read property \'length\' of undefined',
url: 'http://localhost:9001/p/OkTJWMYVNs',
linenumber: 15,
userAgent: 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36' }
ãµãŒããŒã匷å¶çµäºãããšãã¡ãã»ãŒãžãã¯ã©ã€ã¢ã³ãã«è¡šç€ºãããŸãã
å£ãããããã®SQLã€ã³ããŒããæäŸã§ãããããããŸããããæåã«ããŒã¿ããŒã¹ããæ£ç¢ºã«äœãæœåºããå¿ èŠãããããæããŠãã ããã :-)
å®éã®ãããã®å
容ã¯éåžžã«åœ¹ç«ã€ã®ã§ãdb key pad:<PADID>
ïŒhttp://etherpad.org/doc/v1.4.0/#index_pad_padidïŒãšããããæåŸã®ãªããžã§ã³ã®ããã€ãã«ãªããŸãã
ç§ã¯è¿ã¥ããŠãããšæããŸãïŒ
checkPadã¯èšãïŒ
$ bin/checkPad <padID>
[WARN] console - DirtyDB is used. This is fine for testing but not recommended for production.
[ERROR] console - Bad changeset at revision 4901 - Failed assertion: mismatched apply: 11636 / 11635
[ERROR] console - Bad changeset at revision 11401 - Failed assertion: mismatched apply: 42094 / 42093
[ERROR] console - Bad changeset at revision 12301 - Failed assertion: mismatched apply: 48875 / 48874
[ERROR] console - Bad changeset at revision 13601 - Failed assertion: mismatched apply: 60227 / 60226
[INFO] console - finished
ãã¹ãŠã®å Žåã«é©çšãäžèŽããªããšããããšã¯ãåé¡ã®ãã§ã³ãžã»ãããå®éã«ååšããæåããã1æåå°ãªãããšãæåŸ ããŠããããšãæå³ããŸãïŒã€ãŸããäºæããªãæåã1ã€ãããŸãïŒã ããŒã¿ããŒã¹ãã³ãã調ã¹ããšããããããã®ãã§ã³ãžã»ããã¯ãã¹ãŠãããã¹ããæ·»ä»ããããªããžã§ã³ã«åŸã£ãŠããããšãããããŸããïŒãã¹ãŠã®ãªããžã§ã³ã«å®å šãªãããã®å 容ãå«ãŸããŠããããã§ã¯ãªãããã«ã¿ã®ã¿ãå«ãŸããŠããŸãããããã©ãŒãã³ã¹äžã®çç±ãããå®å šãªå 容ãå«ãŸããŠããããšããããããŸãæ·»ä»ãããŠããŸãïŒã
ããããããªããžã§ã³ãä¿åãããšãããŸãã¯æ°ãããããã¯ã©ã€ã¢ã³ãã®çŸåšã®ããã¹ããäœæãããšãã«ããã®ã¡ã¿ããããã£ã§åé¡ãçºçããŸããã
checkPadãæžãçŽããŠããã£ãã·ã¥ãããããã¹ãã®ä»£ããã«èšç®ãããããã¹ãã䜿çšãããšãããããæž¡ãããŸãã ãã£ãã·ã¥ãããããã¹ãã§ããæ£ããã§ãïŒ ããã«ãããclient_varsã®å®å šãªããã¹ããèšç®ããã¢ã«ãŽãªãºã ã«ãã°ããããšæããŸãã
ãããŸã§ã®ãšãããMarcelã¯çŽ æŽãããä»äºãããŠããŸãã ããªãã¯ããã解決ããããšããŠããããã§ããã
ãããããã¯client_varsãžã§ãã¬ãŒã¿ãŒã§ã¯ãããŸããã ãã£ãã·ã¥ãããããã¹ãã®äœæãæ åœããã¢ã«ãŽãªãºã ãå£ããŠããŸãã
@ Ra1d3nã¯ã€ãã¯ãã£ãã¯ã¹ãšããŠããã¹ãŠã®äž»èŠãªãªããžã§ã³ïŒ revNo % 100 == 0
ïŒããatextã¡ã¿ããããã£ãåé€ããããšã§ãå£ãããããã埩掻ãããããšãã§ããŸãã å£ãããããã«é¢é£ãããã¹ãŠã®ã¬ã³ãŒãããåæ¿å
¥ãããããšã¯ãããªãåã«åæ§ã®åé¡ã®ä¿®æ£ãšããŠå ±åãããŸãã-ä»ã§ã¯ãããæ©èœããçç±ãããããŸãã:)
@marcelklehrããã«ãããEPã¯ããŒãæã«ãªããžã§ã³0ããããããåæ§ç¯ããŸããïŒ ãããªãããã¹ãŠã®ãªããžã§ã³ãããã¹ãŠã®atextããããã£ãåé€ããã¹ãã§ã¯ãªããšæããŸã... :-)æ£ããã¢ã«ãŽãªãºã ã§ããŒãªããžã§ã³ãåæ§ç¯ããããããã®åçæãã¹ã¯ãªããã«æåŸ ã¯ãããŸããïŒ
checkPad-scriptã«ããã€ãã®å€æŽãå ããŸããã ãããåç
§ããŠãã ããïŒïŒ1653
ããããããã¯ãã£ãšæ±ãããã¯ã§ãã ã¹ã¯ãªããã§ãã®åé¡ã解決ããå Žåã¯ãããããä¿®æ£ããã¹ã¯ãªãããäœæããŸã
ãã£ãããã楜ãã¿ã«ããŠããŸãã çŸåšãå£ãããããã¯1é±éã«1ã€ãããªãã®ã§ãé©åã«ä¿®æ£ãããã®ãåŸ ã€åŸåããããŸãã :-)ããããšãã
ãããç§ã¯å°æ¬ãèããŠããŸããã
ãããã£ãŠãèšç®ãããããã¹ããšãã£ãã·ã¥ãããããã¹ãã®å·®åã¯ããкПМÑеÑÑПвããã©ãããããããкП ÑеÑÑПвãã«å€ãã£ãããšã瀺ããŠããŸãã å¥ã®æ¹èšã§ã¯ããзããã ãã«å€æŽãããŸãã...
ãããäœãªã®ãããããŸããã ãããã®æåã¯UnicodeBMPãafaikã«å«ãŸããŠãããããäœãèµ·ãã£ãã®ãããããŸããã
@ Ra1d3nã®ãããã®å€ç°ã¯ãããŒãªããžã§ã³ãã®ã¹ã¯ãªããã§åæïŒ
æåã¯ã©ã³ãã ã«é£ãã§ããããã§ãã æ¬åœã«äœãçªãåºãŠããŸããã ãã¿ãŒã³ãèŠåœãããŸããã
AttributedTextãããŒã¿ããŒã¹ã«ä¿åãããšãã«åé¡ãçºçãããšæãããŸãã å£ããããŒãªããžã§ã³ã®éã«ããããå埩ããããšãããã®ã§ãã¡ã¢ãªã«ä¿åãããŠããããã¹ãã¯è¯ããšæããŸãã ãã ããããŒã¿ããŒã¹ã«ä¿åãããšãã©ããããããç ŽæããããšããããŸãã 次ã®äž»èŠãªãªããžã§ã³ãäœæããããŸã§äœæè
ãããã¥ã¡ã³ããç·šéãç¶ãããã®ãªããžã§ã³ãç Žæããããšã¯ãªãå Žåã誰ãäœãæ°ä»ããªãã§ãããã
ãã ããã¡ã¢ãªã«ä¿æãããŠããæå¹ãªATextãããŒã¿ããŒã¹ã«æ£åžžã«ä¿åããåã«ãµãŒããŒãã·ã£ããããŠã³ãããšã次åã®ãµãŒããŒèµ·åæã«ããããç ŽæããŸãã
@marcelklehrãã©ã°ã€ã³ãé©åã«ã³ãŒãã£ã³ã°ãããŠããªãã£ããããetherpadãã¯ã©ãã·ã¥ããŠæ°åå埩ããŸãããããããåå ã§ããããïŒ æ¯åå£ããã®ã¯ãã£ãäžæåã ãšããã®ã¯äžæè°ã§ãã
ãããã®ãã¹ãŠã®ããŒã¿ããŒã¹å€ãåæ¿å
¥ããã¹ã¯ãªãããäœæããŸããã å£ãããããã§ã¯ãã¹ã¯ãªãããæ©èœããŸããã§ããã
@ Ra1d3nããããã¹ã¯ãªãããããŠã³ããŒãã§ããŸãïŒ https ïŒ
ãã®ã¹ã¯ãªããã®å®è¡äžã¯ãetherpadã€ã³ã¹ã¿ã³ã¹ãå®è¡ãããŠããªãããšã確èªããŠãã ããã
@Garedã¹ã¯ãªããã®ã©ãããå€ãååŸããŸããïŒ checkPadãã©ãŒã¯ã調æŽããŠãåèšç®ãããAttributedTextå€ãããŒã¿ããŒã¹ã«æ¿å ¥ããããšããå§ãããŸãã
@ Ra1d3n Etherpadã®ã¯ã©ãã·ã¥ããããŒã¿ã®ç ŽæãåŒãèµ·ããå¯èœæ§ã¯äœããšæããŸãã
@marcelklehrãããã®å Žåãæ£ããã¡ã¢ãªå€ã倱ããããããããããåé¡ãããæ確ã«ãªããŸããã
@marcelklehrãã®ã¹ã¯ãªããã¯ãextractPadDataã¹ã¯ãªããããã®ãã©ãŒã¯ã§ãã å€ãšããŒã¯äžèšã®é¢æ°ã«ããŒããããŸãã ãããã¯ãã¹ãŠãããã®ããŒã§ãã
@GaredããrepairPad.jsã¹ã¯ãªããã¯ç§ã®å£ããããããåºå®ããŠããŸãã ãã®ä¿®æ£ã次ã®etherpad-liteããŒãžã§ã³ã«çµã¿èŸŒãŸããå¯èœæ§ã¯ãããŸããïŒ
ãã«ãªã¯ãšã¹ããéä¿¡ãããã @ Garedã«éä¿¡ããŠãã ãã
ãã«ãªã¯ãšã¹ãïŒ2210ãéããŸãã
ç§ã®etherpadã¯1.4.1ã§å®è¡ãããŠãããäžèšãšåãåé¡ã3åçºçããŠããŸããããããããŒãã§ããŸãããã/ timesliderã¯æ£åžžã«æ©èœããŸãã
ãããã®ãã¡ã®2ã€ã¯ãäœãããã«åå®è¡ãããŠããŸãã
3çªç®ã®ãããã§ãrepairPad.jsãè©ŠããŸããã倱æããŸããã ãã®URLã¯ïŒ+1ã§ãïŒ http ïŒ//portail.univ-lille1.fr/etherpad/link.jspïŒgroupID = g.jfobkKVrkydeTwLYïŒpadID = SES_Grp8_MacroeconomieïŒãutilisezle padavecl'invitexyããã¯ãªãã¯ããŠã¢ã¯ã»ã¹ããŸãããã£ããã»ã«ãã
ãã¶ããrepairPadã§èæ ®ãããŠããªãç°åžžãªå€ã®ãã§ã³ãžã»ããããããŸããããããšãgitã§èŠãããšããªãreparPad.jsã®æ°ãããªãªãŒã¹ããããŸããïŒ
çŸåšãããã«å¯Ÿããä¿®æ£ããããšæããŸãã éçºãšãã¹ãããã«ããŠãã ãã:)ããããšãïŒ
ããã«ã¡ã¯ãç§ãã¡ã¯ã¡ããã©ãããèµ·ãã£ããšããã§ãã æåŸã«ãªãªãŒã¹ãããããŒãžã§ã³ã§ãã1.5.7ãå®è¡ããŸãã ããã¯ãšã³ãã¯MySQLããŒã¿ããŒã¹ã§ãã ãããåŒãèµ·ãããå¯èœæ§ã®ãããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«ã€ããŠã¯äœã瀺ããŠããŸããã
åé¡ã®ãããïŒ https ïŒ
ã¿ã€ã ã¹ã©ã€ããŒããªãã¯ãä»ããŠãããããŒã¿ãååŸããããšã¯åé¡ãªãæ©èœããŸãã ãã ãããããã¯ããŒããããŸããã
ããŒã¿ããŒã¹å ã®ãã¹ãŠã®ãã®ããã³ãããŠã圹ç«ã€å Žåã¯ãããã°çšã«æäŸã§ããŸãã
ããã«ã¡ã¯ãç§ã¯ååäžã«ãã®è°è«ãããŸããã
08:47 <webzwo0i>ãã¥ãŒã¿ã³ãïŒãããããããã°ããŸããã éåžžã¯ãããè¡ãã¹ãã§ã¯ãããŸããããããŒã¿ããŒã¹ã®ããã¯ã¢ãããããå ŽåïŒããã³ãšã¯ã¹ããŒã/ãšãŒãã«ããããäœæããåŸã
ãããïŒ3ã€ã®ããŒã¿ããŒã¹ãšã³ããªãå€æŽã§ãããããã¯åã³æ£åžžã«æ©èœããã¯ãã§ãã 3ã€ã®mysqlã³ãã³ãã¯
mysql> update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS-iteration-planning";
mysql> update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS-iteration-planning:revs:7200";
mysql> update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS-iteration-planning:revs:7300";
08:49 <webzwo0i>ããŒã¿ããŒã¹ã§utf8mb4æåã»ãããŸãã¯utf8ãå®è¡ãããŠãããã©ããã確èªã§ããŸããïŒ
08:51 <webzwo0i> oha upsmysql-commandsãé©çšããªãã§ãã ããã å€åç§ã¯å°ãéãã£ãã§ã:-)æåã«äœãããã§ãã¯ããå¿
èŠããããŸã
09:08 <webzwo0i> mh nopeã¯åé¡ãªãã¯ãã§ãããã¹ãããŠãã ãã...ææ°ã®ãªãªãŒã¹ãäœãä»ã®ãã®ãå®è¡ãããã©ããããããŠã©ã®ãã©ã°ã€ã³ãæå¹ã«ããããç¥ã£ãŠãããšããã§ããã
09:47 <webzwo0i>ãŠã£ãã¡ãã£ã¢ã®pplããäºããç¥ã£ãŠãããã©ããã¯ããããŸãããããŠãŒã¶ãŒããã©ã€ã¢ã³ãã誰ã§ããããç¥ãããšãã§ããã°ã圌ã䜿çšããŠãããã©ãŠã¶ãå°ããããšãã§ããŸããïŒ ã€ã³ã¯ã«ãŒã
çç±ã¯ããã°ãäœã§ãããã¯ããããŸããããã©ãŠã¶ã§ããªã¬ãŒã§ããŸããïŒæåã§ã®ã¿ã§ãããpplã¯æµå¯Ÿçã§ã¯ãªãããããããããªã³ã§ã¯ãããŸããã§ããïŒ
ç®çïŒ
09:49 <webzwo0i>ïŒãããã£ãŠããããã2ã€ã®ãã°ããããŸãã1ã€ã¯ãµãŒããŒåŽããã1ã€ã¯ã¯ã©ã€ã¢ã³ãåŽã§ãïŒ
å¿
èŠãªæ
å ±ã¯ãããŒã¿ããŒã¹ãutf8ãŸãã¯utf8mb4ã®å Žåã§ãã
åé¡ã®ãããã§ã³ãžã»ãããæœåºããŸãããé©çšããªãå Žåãã¿ã€ã ã¹ã©ã€ããŒã¯ãããã®ãªããžã§ã³ãåé¿ããŸããã
mysql> update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS-iteration-planning:revs:7105";
äžèšããã®æŽæ°ãšäžç·ã«ããã¯ããªãã®ããããåã³åå©çšå¯èœã«ããã¯ãã§ã
@ webzwo0i
ããããã¥ãŒã¿ã³ããããªãã«è©±ããããŠããã®ã«æ°ã¥ããŸããã githubã®åé¡ã«ã€ããŠããã©ããŒã¢ããããããšã«ããŸããã ããã©ã€ã¢ã³ãã誰ã§ãã©ã®ãã©ãŠã¶ã䜿çšããŠãããã远跡ããŸãã
ãããã£ãŠãã¹ãã¢ããŒãã«ã¯ããªãé·ãéutf8mb4ã§ãã utf8ã§ãããã6æã«å¥ã®åé¡ãçºçãããããutf8mb4ã«å€æããŸãããå ·äœçã«ã¯2015幎6æ23æ¥ã§ãã
https://github.com/ether/etherpad-lite/issues/2522#issuecomment-114441189 ;-)
ãŠãŒã¶ãŒ/ãã©ãŠã¶ãèŠã€ããå¿ èŠã¯ãããŸãããä»ãããã°ãåçŸã§ããŸãã ããããšãããããŸããïŒ
ææ°ãªãªãŒã¹ã䜿çšããŠãããããdbSettingså ã®settings.jsonã«ãcharsetãïŒãutf8mb4ããæ¿å ¥ããå¿ èŠããããŸãã ããã¯ãsettings.json.templateã«ãããŸãã ãããå¿ èŠãã©ããã確èªã§ããŸã
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
ããŒã¿ããŒã¹ããŒãã«èªäœã4ãã€ãã®utf8ãæ ŒçŽã§ãããããµãŒããŒãã¯ã©ã€ã¢ã³ãæ¥ç¶ã«4ãã€ãã®utf8ãæåŸ
ããŠããªãå Žåãã¯ã©ã€ã¢ã³ãïŒããã³ããããæ¥ç¶ïŒïŒã¯utf8mb4ã瀺ãå¿
èŠããããŸãã
ããã¯å€ããããã修埩ããŸããã ãã ãããã¹ãŠã®ããããç¹°ãè¿ãåŠçããbin / checkPad.jsã䜿çšããŠãåæ§ã®åé¡ãçºçããå¯èœæ§ã®ãããããã®æ°ãšããããææ¡ã§ããŸãã ç¶æ³ã«ãã£ãŠã¯ãäžèšã®ããã«éåžžã«ç°¡åã«ä¿®åŸ©ã§ããŸãïŒäžéšã®æåã¯å£ããŸããïŒã å£ããããããããããããå Žåã¯ããããèªååããã®ãçã«ããªã£ãŠãããããããŸããã
人ã ãå®éã«æžããŠãããšãã«ãããã®åé¡ãèŠãããªãçç±ã¯ãã»ãšãã©ã®ãµã€ããããã©ãŒãã³ã¹ã®ããã«ueberDBã®å éšãã£ãã·ã¥ã䜿çšããŠããããã§ãã ãã®çŽç²ãªJavaScriptãã£ãã·ã¥ã¯ãUnicodeãå®å šã«èªèããŠããŸãã ãã£ãã·ã¥ããã©ãã·ã¥ãããããetherpadãåèµ·åããããšããã«ãããŒã¿ããŒã¹ãããšã³ããªãååŸããå¿ èŠããããŸãã
ç§ã¯ããªããæ瀺ããããã«ããããä¿®çããŸããã é£ç¶ãã4ã€ã®çå笊ããã®ãããªæ¹æ³ã§PADãç Žå£ããããšãèŠã€ããã®ã¯èå³æ·±ãããšã§ãã ãããŠãç ŽæããŠãããã§ã³ãžã»ããã¯ããããã®å 端ã«æ¯ã¹ãŠéåžžã«å€ãã§ãããã ããããããªãã®èª¬æã¯çã«ããªã£ãŠããŸãããããããããšãã
ãcharsetãïŒãutf8mb4ãã§æ§æãæŽæ°ããŸããã
ãŠã£ãã¡ãã£ã¢ã§phabricatorãã±ããããã©ããŒããŠããŸãããã¢ã«ãŠã³ããæã£ãŠããªãã®ã§ãããã«æçš¿ããŸãã
2çªç®ã«å£ãããããã¯ã次ã䜿çšããŠä¿®åŸ©ããããšãã§ããŸãã
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1120";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1254";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1216";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1108";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1106";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1200";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1300";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1400";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1500";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1600";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1700";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1800";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:1900";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2000";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2100";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2200";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2300";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives:revs:2400";
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:iOS_Retrospectives";
iircã4ãã€ãUTF8ã®1ãã€ãã¯æå¹ãªUTF8ã§ã¯ãªãããã4ã€ã®çå笊ãçç¶ã§ãã ïŒUTF8ã§ã¯ãæåã®127æåã®ã¿ãã·ã³ã°ã«ãã€ããšããŠè¡šãããŸãããã«ããã€ãUTF8ã¯ããããã0x7fãè¶ ãããã€ãã䜿çšããŸãïŒã ãããã£ãŠã4ã€ã®çå笊ã¯ãå®éã«ã¯1ã€ã®4ãã€ãã§ãšã³ã³ãŒããããUTF8æååãè¡šããŸããããã¯ãåºæ¬çãªå€èšèªãã¬ãŒã³ïŒããããçµµæå:-DïŒã®å€åŽã®ã³ãŒããã€ã³ããè¡šããŸãã Javascriptã§ã¯ããããã®ã³ãŒããã€ã³ãã¯ã2ã€ã®16ãããå€ã§ããUTF16ã®ãµãã²ãŒããã¢ã䜿çšããŠãšã³ã³ãŒããããŸãã
checkRepã®åé¡ã¯ããã§ã³ãžã»ããã«æåã ãã§ãªãå€æŽã®é·ããæ ŒçŽããããšã§ãã ãã ããJavascriptã®lengthïŒïŒé¢æ°ã¯ãµãã²ãŒããã¢ã2ãšããŠã«ãŠã³ããããããããšãã°çµµæåã®é·ãã¯2ã§ããmysqlããã§ã³ãžã»ããã®æååãçå笊ã«ãã³ãŒããããšããã§ã³ãžã»ããã®è¡šçŸã¯ç¡å¹ã«ãªããŸãã
ãŠãŒã¶ãŒãæåã«å ¥åããã³ãŒããã€ã³ããããããªãããã2ã€ã®çå笊ã«çœ®ãæããããšã¯ãå®éã®è§£æ±ºçã§ã¯ãããŸããïŒãã ããå€ãueberDBã®ãã£ãã·ã¥ã«ããéããããããååŸã§ããŸãïŒã
誰ããå®éã«4ã€ã®çå笊ã䜿çšãããšééã£ãçµæãçæãããŸãïŒé·ãã®å€ã¯4ã瀺ãã2ã€ã®çå笊ã«çœ®ãæãããšã代ããã«checkRepãšã©ãŒãçºçããŸãïŒããããã£ãŠã修埩ã¹ã¯ãªãããèªååããå Žåã¯ããã§ãã¯ããå¿ èŠããããŸããå€æŽãé©çšããåŸã®æååã®é·ãããè¿œå ãããæåæ°ãïŒå€æŽã»ããã®å€ïŒã«æºæ ããŠããå Žåã
誰ããå®éã«4ã€ã®çå笊ã䜿çšããããã«çµµæåãªã©ã®ã³ãŒããã€ã³ãã䜿çšããå Žåã«åé¡ãåé¿ããã«ã¯ãçå笊ã眮ãæããããã¥ã¡ã³ãå ã®äœçœ®ã远跡ããå¿ èŠããããŸãã
ãŸãããã¹ãŠã®checkRep-errorãå£ãããšã³ã³ãŒãã£ã³ã°ã«ãã£ãŠåŒãèµ·ããããããã§ã¯ãªãããšã«ã泚æããŠãã ãã
ãããŠãã¡ãããäžèšã¯ããŸããããŸããã é©ãã°ããïŒ ããªãã«ã¯æè¬ããŠãããããŸããã æ§æã®ä¿®æ£ãè¡ãããŠããã°ããããäºåºŠãšèµ·ãããªãããšãé¡ã£ãŠããŸãã
ããªããããŠãããããã°ã¯æåã§è¡ãããŠããã®ã ããããšæã£ãŠããŸããã ãã§ã³ãžã»ãããšãã®é·ããæåã§1ã€ãã€ååŸããŠæ¯èŒãããããããè¡ãããã®ããèªååãããæ¹æ³ãããå Žåã ãšã«ããèªåã®ãã®ãäœãããšæããŸãã
<3 @ webzwo0iããããšãããããŸãã
@ webzwo0iæè¿ïŒãã©ãã°ã¢ã³ãããããã®ããã«ïŒèŠçŽ ã®X
ãšã©ãŒã¯ãåäžã®çµµæåïŒäŸïŒðŒïŒã§æ°ããããããäœæããetherpadãåèµ·åããããšã§ç°¡åã«åçŸã§ããŸããïŒ3340ãåç §ããŠãã ããã
æŽæ°ïŒ2019幎4æã®æç¹ã§ããã®åäžã®çµµæåèªäœã¯ãåèµ·åããåŸã§ãããããå£ããŸããã
ãã¹ãŠã®ãããããã§ãã¯ãããã£ãã®ã§ã checkAllPads
ããŒã«ãè¿œå ããŸããïŒPRïŒ3342ãåç
§ïŒã
ãšã©ãŒã¯ãåäžã®çµµæåïŒããšãã°ãpanda_faceïŒã§æ°ããããããäœæããetherpadãåèµ·åããããšã§ç°¡åã«åçŸã§ããŸããïŒ3340ãåç §ããŠãã ããã
äžèšãšãŸã£ããåãããã«ããããåçŸããããšã¯ã§ããŸããã äŸã«ã€ããŠã¯ã httpsïŒ //etherpad.wikimedia.org/p/ohmyãåç §ããŠ
ãã®ãšã©ãŒã§ãããããå£ããŸããã äžæè°ãªããšã«ã checkPad,js
ã¯åé¡ãæ€åºããã repairPad.js
ã¯ä¿®æ£ããã«å®äºããŸãã ã©ã®ãªããžã§ã³ã«åé¡ãããããå€æããæ¹æ³ã¯ãããŸããïŒ
ç·šéïŒãããç§ã¯æ£ããæ¹åã瀺ããŠããhttps://gist.github.com/marcelklehr/a78d293571e7f06e3cf9ãèŠã€ããŸããã ãããetherpadèªäœã«å«ãŸããå¯èœæ§ã¯ãããŸããïŒ ããããã®ãããã§ãä»ã¯ç¡éã«åœ¹ã«ç«ã¡ãŸããïŒ ïŒãã ãããªããžã§ã³çªå·ã衚瀺ããã«ã¯ã console.log
ãconsole.error
ã«çœ®ãæããå¿
èŠããããŸãããnodeJSã®çµéšã¯ãŸã£ãããããŸããããå®éã«ãã¹ãŠã®ãã°ã衚瀺ããå¥ã®æ¹æ³ãèŠã€ããããšãã§ããŸããã§ããã ïŒ
å®éãã ????
ã??
眮ãæããããè¡ãããšãããã§åœ¹ç«ã¡ãŸããã :)æåŸã®ãã§ã³ãžã»ããã¯èª°ããçµµæåãæ¿å
¥ããããã§ãïŒ $????
ã§çµãããŸããïŒã
ãããããªããããããã€ããŒãã°ãã«åé¡ãããã®ãããããŸããã ãã®ãã°ã«ãããããããå®å
šã«å€±ãããŸãïŒ /timeslider
æ°ä»ããŸã§ããã®å Žåã¯1é±éããããããã§ãå±¥æŽã倱ãããŸãïŒã
ãããä¿®æ£ããå¯èœæ§ã¯äœãã®ã§ãèªåèªèº«ãå²ãåœãŠãŸããã FWIWããã®ãã°ã¯easysyncã©ã€ãã©ãªã®å¶éã«ãããã®ãšæãããŸãããããã¯utf-8ã®ãã¹ãŠããµããŒãããŠããããã§ã¯ãªããšç§ã¯æšæž¬ããŠããŸãã ïŒUTF-8ã¯ã1æåãè€æ°ãã€ããšããŠãšã³ã³ãŒãããå ŽåããããŸããåãã€ãã¯ã1æåã§ãã£ãŠããJavaScriptã®æååã®é·ãã«è¿œå ãããŸããïŒ
-æ°ã«ããªã-ïŒD
FWIWããã®ãã°ã¯easysyncã©ã€ãã©ãªã®å¶éã«ãããã®ãšæãããŸãããããã¯utf-8ã®ãã¹ãŠããµããŒãããŠããããã§ã¯ãªããšç§ã¯æšæž¬ããŠããŸãã ïŒUTF-8ã¯ã1æåãè€æ°ãã€ããšããŠãšã³ã³ãŒãããå ŽåããããŸããåãã€ãã¯ã1æåã§ãã£ãŠããJavaScriptã®æååã®é·ãã«è¿œå ãããŸããïŒ
å®éããããã«ã¯åžžã«ãŠã ã©ãŠãïŒÃ€Ã¶ÃŒïŒããããUTF-8ã§ããã«ããã€ãã§ãã äžèšã®å
容ã«åºã¥ããšãåé¡ã¯å®éã«ã¯UTF-16ã«é¢ãããã®ã ãšæããŸããããã¯ãåœåã®èšèšã§ã¯ãæåãããæ£ç¢ºã«2ãã€ãïŒå®éã«ã¯ã³ãŒããã€ã³ãïŒã§ããããšãæå³ãããŠããŸããããçŸåšã¯2ãã€ããè¶
ããŠããŸãã 16ã®ã³ãŒããã€ã³ãã«ã¯ãçµµæåã®ããã«4ãã€ããå¿
èŠãšãããã®ããããŸãã ãããŠä»ã length()
ã¯ã³ãŒããã€ã³ãã®æ°ãšäžèŽããªããªãããã¹ãŠãæ··ä¹±ããŸãã
ããã§ãããããããè¯ãä¿®æ£ã¯ã代çãã¢ïŒ4ãã€ãã®ã³ãŒããã€ã³ãïŒãå®å šã«æåŠããããšã§ããïŒ ããã¯è£å©é¢ããã®æåã§etherpadã䜿çšããããšãäžå¯èœã«ããã§ãããããããããã¯ãšã«ããå£ããŠããããã§ãïŒ ãããŠããã¯DBãä¿è·ããã¯ãã§ãã JSã§ããã¹ããã
ãªããããééãããã®ã§ããïŒ ç§ã®ç¥ãéããEtherpadã¯ãŸã BMPå€ã®æåãçªæ¯ãããŸãã æè¿ããã®æ¹æ³ã§å£ããããããæåã§ä¿®çããå¿ èŠããããŸããã
2014幎çºè¡ãéããã®ã§ãããèå³ããªããªã£ãã®ã§éããŸããã
ãŸããããã¯ãŸã ä»ã®äººã«ãšã£ãŠæªè§£æ±ºã®åé¡ãªã®ã§ãåéããŠããã ããã°å¹žãã§ãã
ããããšãïŒ :)
ãããã確å®ã«å£ãæåïŒã·ãŒã±ã³ã¹ïŒã®äŸã¯ãããŸããïŒ ããã¯ç§ãæšæž¬ãããããã°ã容æã«ããã§ãããã
Easysyncã©ã€ãã©ãªã¯ãããã¹ãïŒããã³ãã®é·ãïŒããæåãã®èŠ³ç¹ããèšè¿°ããŸããã10幎åããã®æå°éã®å®è¡å¯èœãªè£œåã§ããã ä»æ¥ã§ã¯ãããããNFCã§æ£èŠåãããUTF-8ã³ãŒããã€ã³ãã®èŠ³ç¹ããèããå¿ èŠããããŸãã
çåã«æã£ãŠããã®ã§ãããueberdbå€ãç §åãããããã¹ãåã§ã¯ãªããã€ããªããããšããŠä¿åããããšã§åé¡ã解決ã§ããã§ããããïŒ
çŸåšãæå¹ã§ã¯ãªããã€ãã·ãŒã±ã³ã¹utf8mb4ïŒãã«ããã€ãæåã®äžéšãå«ããã§ã³ãžã»ãããèããŠãã ããïŒãutf8mb4
åã«å
¥ããããšãããšãèããããçµæã¯2ã€ã ãã§ããããŒã¿ããŒã¹ãå
¥åããŸãã¯ã¯ã©ã€ã¢ã³ãïŒãŸãã¯ãµãŒããŒïŒã¯ãåã«ç¡å¹ãªãæåããŸãã¯ãã€ããåé€ããïŒãïŒãã«çœ®ãæããïŒå¿
èŠããããŸãã
ãã€ããªblobåã䜿çšããããšã«ãããããŒã¿ããŒã¹ã¯ãã€ãã·ãŒã±ã³ã¹ãç¡å¹ãªutf8mb4ã§ããããšãèªèããªããªããããæåã®çœ®æãåé¿ã§ããå¯èœæ§ããããŸãã easysyncãç§ãç解ããŠããããã«ãšã³ã³ãŒãã£ã³ã°ã«ãšããããªãå Žåãããã¯æ©èœããå¯èœæ§ããããŸãïŒ2人ã®ãŠãŒã¶ãŒããã«ããã€ãæåABãšCDãåãäœçœ®ã«åæã«æ¿å ¥ãããããããåå¥ã®ãã§ã³ãžã»ããAãCãBãDãšããŠçµããå Žåã«éããŸã-ããã§order-ãããŒãžãããçµæãç¡å¹ã«ããutf8mb4ïŒã
PSïŒð°ã®ãããª4ãã€ãã®UTF8æåãæ¿å ¥ããããšèªäœã¯åé¡ã§ã¯ãªãããšããã¹ãããã°ããã§ãïŒãã ãããŸã åèµ·åããŠããŸãããããã¯èª¬æãããããŸããïŒããããã£ãŠããã°ã«ã¯åæå®è¡æ§ãå¿ èŠã§ãããšæããŸãïŒæåãåç¬ã§ã¯ç¡å¹ãª2ã€ä»¥äžã®ãã§ã³ãžã»ããã«åå²ããããã¯ã©ã€ã¢ã³ãããã®ãããªæåã®äžéšãåé€ãããã§ã³ãžã»ãããçºè¡ããå¿ èŠããããŸãã
ããã«ã¡ã¯ãç§ãã¡ã¯å€ãã®ãããã§ããã®åé¡ãçµéšããŠããŸãã
ç§ã¯ãã¹ãŠãè©ŠããŠããŸããããããð°ã«çœ®ãæããããšã¯ã§ããŸãããåèµ·åãããŸããŸãªããŒã¿ããŒã¹ããã¯ãšã³ãïŒé©åã«æ§æãããŠããïŒãè©ŠããŸããã
ææ°ã®ã³ãŒãããŒã¹ã§è€è£œããæé ã誰ããæäŸã§ããŸããïŒ
ð°ã§ããã¯ã¹ããŒã¹ãæŒããšãã¢ã€ãã ã ã«çœ®ãæããããŸãããããã¯æããã«åä»ã§ãã
ç§ã«ãšã£ãŠã replace(
å€,'????','??')
ã¯ããããŸã§åžžã«æ©èœããŠããŸããã ããããæ°ã¶æã¯èµ·ãã£ãŠããŸããã
åäœããCheckPad Deltasã®æŽæ°ããŒãžã§ã³ãå«ããŸããããã®åé¡ãçºçãããšãã«åœ¹ç«ã€ãã©ãããè©ŠããŠã¿ãããšãã§ããã°ããããããã§ãã
ããã§ãåºæ¬çãªåé¡ã¯ãEtherpadããŒã¿ã¢ãã«ãæ£èŠåãããUTF-8ã³ãŒããã€ã³ãã§ã¯ãªããæåãã®èŠ³ç¹ããèããããšã ãšæããŸãã
ã³ã¢ã©ã€ãã©ãªãäœãçŽããªãéãããããå®éã«è§£æ±ºãããããšã¯ãããŸããã æããã«ãã©ããªç·©åçã圹ã«ç«ã¡ãŸãã ç§ã®æèŠã§ã¯ã100ïŒ æ£ããããšãä¿èšŒãããŠãã_ç°¡åãª_ãœãªã¥ãŒã·ã§ã³ã¯ãªããšèšã£ãŠããã ãã§ãã
ã©ãã ãå€ãã®ãšãã£ã¿ãŒïŒãããŠéçºè ã«éåžžã«äººæ°ã®ãããšãã£ã¿ãŒïŒãEtherpadthoãšåæ§ã®çµéšãããŠããã®ãé©ãããããšã§ãããã ä»æ¥éãã§ãç§ã¯ããã€ãã®ã¯ã¬ã€ãžãŒãªçµéšãããŸããã
åäœããCheckPad Deltasã®æŽæ°ããŒãžã§ã³ãå«ããŸããããã®åé¡ãçºçãããšãã«åœ¹ç«ã€ãã©ãããè©ŠããŠã¿ãããšãã§ããã°ããããããã§ãã
ïŒ3717ïŒ14ae2ee95094ïŒã§ãã¹ã¿ãŒãã©ã³ãã«ãã«ã€ã³ãããŸããã
ããã«ã¡ã¯ããããã®1ã€ã§åæ§ã®åé¡ãçºçããŠããŸãã
@JohnMcLearæ®å¿µãªããã
@gndãããªãã¯ã€ã³ã¹ã¿ã³ã¹ã¯ãããŸããïŒ
padId / export / etherpad urlãæŒããŠã.etherpadãã¡ã€ã«ãååŸã§ããŸããïŒ
ææ°ã®éçºãå®è¡ããŠããŸããïŒ
ããŒã¿ããŒã¹ã®ããã¯ãšã³ãã¯äœã§ããïŒ
ããããã®è³ªåããããŸãã®ã§ãã§ããã ã詳ããæããŠãã ãã
@JohnMcLear
ã¯ãããã®ãããªãã¯ã€ã³ã¹ã¿ã³ã¹ïŒ https ïŒ
æ®å¿µãªããã.etherpadãã¡ã€ã«ãååŸããããšãããš502 BadGatewayãšã©ãŒãçºçããŸã
nodejs 12.16.3-1nodesource1ã§ææ°ã®éçºïŒgit pull originïŒãå®è¡ããŠãããdbããã¯ãšã³ãã¯10.3.22-MariaDB-0 + deb10u1ã§ãã
ç§ã¯ããªããããããšæããããããªãããããçš®é¡ã®ãããã°ã§ããªããå©ããããã«ä»æ¥å©çšå¯èœã§ãã checkPadDeltasã®æåŸã®ããŒãžã§ã³ããã§ã«è©ŠããŸããããèµ·ååŸæ°æéãã³ã°ããŸãã ããã¯ãããäžããå¯äžã®åºåã§ãïŒ
ãã¹ãŠã®çžå¯Ÿãã¹ã¯ãèå¥ãããEtherpadããŒã¹ãã£ã¬ã¯ããªã«é¢é£ããŠè§£éãããŸãïŒ/ opt / etherpad
[2020-05-05 00ïŒ04ïŒ12.330] [DEBUG] AbsolutePaths-çžå¯Ÿãã¹ãsettings.jsonããã/opt/etherpad/settings.jsonãã«æžãæããããšãã§ããŸã
[2020-05-05 00ïŒ04ïŒ12.346] [DEBUG] AbsolutePaths-çžå¯Ÿãã¹ãcredentials.jsonããã/opt/etherpad/credentials.jsonãã«æžãæããããšãã§ããŸã
ããŒããããèšå®ïŒ/opt/etherpad/settings.json
/opt/etherpad/credentials.jsonã«è³æ Œæ å ±ãã¡ã€ã«ãèŠã€ãããŸããã ç¡èŠããŸãã
[2020-05-05 00ïŒ04ïŒ12.369] [æ å ±]ã³ã³ãœãŒã«-ãã£ã¬ã¯ããªã§ã¹ãã³ãno-skinãã䜿çšããŠããŸãïŒ/ opt / etherpad / src / static / skins / no-skin
[2020-05-05 00ïŒ04ïŒ12.371] [æ å ±]ã³ã³ãœãŒã«-ã»ãã·ã§ã³ããŒã¯/opt/etherpad/SESSIONKEY.txtããããŒããããŸãã
[2020-05-05 00ïŒ04ïŒ12.541] [ãšã©ãŒ]ã³ã³ãœãŒã«-ããŒãã«ãcharsetutf8ã§æ§æãããŠããŸãã-ããã«ãããç¹å®ã®æåããããã«è²Œãä»ãããããšã¯ã©ãã·ã¥ããå¯èœæ§ããããŸã
[2020-05-05 00ïŒ04ïŒ12.543] [æ å ±]ã³ã³ãœãŒã«-RowDataPacket {character_set_nameïŒ 'utf8mb4'} utf8
ããããšã©ãŒã¯ããªãã®ãã°ã«ãããŸãïŒ
[2020-05-05 00:04:12.541] [ERROR] console - table is not configured with charset utf8 -- This may lead to crashes when certain characters are pasted in pads
[2020-05-05 00:04:12.543] [INFO] console - RowDataPacket { character_set_name: 'utf8mb4' } utf8
åç §ïŒ https ïŒ
@JohnMcLear
ç§ãã¡ã®ããŒã¿ããŒã¹ã«ã¯
+ ---------------------------- + -------------------- ---- +
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+ ---------------------------- + -------------------- ---- +
| utf8 | utf8_general_ci |
+ ---------------------------- + -------------------- ---- +
åºã®ããŒãã«ãæã£ãŠããé
+ -------------------- +
| character_set_name |
+ -------------------- +
| utf8mb4 |
+ -------------------- +
ã ããç§ã¯ã䜿çšããŠå€æããå¿
èŠããããŸã
ALTER DATABASE
etherpad_lite_db CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ïŒ
@JohnMcLear
èšå®ãã¹ã¯2ã€ãããããŒã¿ããŒã¹ã¯utf8ãšutf8_general_ciã䜿çšããŠããŸããããsettings.jsonã§ãããŒã¿ããŒã¹ã®æåã»ããã¯ãutf8ããšããŠèšå®ãããŠããŸããã ããããã¹ãŠutf8mb4ã«ä¿®æ£ããŠãå¹æããªããåé¡ã®ããããèªã¿èŸŒãŸãããcheckPadDeltasããã³ã°ããŸãã
ãã¹ãŠã®çžå¯Ÿãã¹ã¯ãèå¥ãããEtherpadããŒã¹ãã£ã¬ã¯ããªã«é¢é£ããŠè§£éãããŸãïŒ/ opt / etherpad
[2020-05-05 13ïŒ17ïŒ43.443] [DEBUG] AbsolutePaths-çžå¯Ÿãã¹ãsettings.jsonããã/opt/etherpad/settings.jsonãã«æžãæããããšãã§ããŸã
[2020-05-05 13ïŒ17ïŒ43.444] [DEBUG] AbsolutePaths-çžå¯Ÿãã¹ãcredentials.jsonããã/opt/etherpad/credentials.jsonãã«æžãæããããšãã§ããŸã
ããŒããããèšå®ïŒ/opt/etherpad/settings.json
/opt/etherpad/credentials.jsonã«è³æ Œæ å ±ãã¡ã€ã«ãèŠã€ãããŸããã ç¡èŠããŸãã
[2020-05-05 13ïŒ17ïŒ43.463] [æ å ±]ã³ã³ãœãŒã«-ãã£ã¬ã¯ããªã§ã¹ãã³ãno-skinãã䜿çšïŒ/ opt / etherpad / src / static / skins / no-skin
[2020-05-05 13ïŒ17ïŒ43.464] [æ å ±]ã³ã³ãœãŒã«-ã»ãã·ã§ã³ããŒã¯/opt/etherpad/SESSIONKEY.txtããããŒããããŸãã
@gndããã¯GiGoã®åé¡ã§ãã ãŽããå ¥ããããå€æŽããããšã¯ã§ããŸããã ä»ããªããç¥ã£ãŠããã®ã¯ãåé¡ãå°æ¥çŸããããšã¯ãªããšããããšã ãã§ãïŒ
@gndããã¯GiGoã®åé¡ã§ãã ãŽããå ¥ããããå€æŽããããšã¯ã§ããŸããã ä»ããªããç¥ã£ãŠããã®ã¯ãåé¡ãå°æ¥çŸããããšã¯ãªããšããããšã ãã§ãïŒ
repairPad.js
ãããã®å£ããããããä¿®æ£ããããšãã§ããŸãããïŒ
ãããã@caugner -æ²ããããšã«äœã®ãrepairPad.jsã¯ãäžè¬çã«åžã£ãŠããªããšãå®éã«ä»äºãããŸããã https://github.com/ether/etherpad-lite/blob/develop/bin/repairPad.js#L48
ç§ãææ¡ã§ããæåã®ããšã¯ããããããããã¹ã/ããã¹ããåŒãåºããŠãæ°ãããããã«å ¥ããããšã§ãã
@gndå¿ èŠã«å¿ããŠãããã¹ããååŸããããã«ãã¹ãããã¹ã¯ãªãããäœæã§ããŸããïŒ
ããã§ã¯ãåºåãstdoutã«å€æŽããbin/extractPadData.js
ã§ååãããããŸããã2åextractPadText.jsãäœæããŸã
@JohnMcLearããã¯ç¢ºãã«éåžžã«åœ¹ç«ã¡ãŸãïŒ
node bin/extractPadData.js $padid
䜿çšãã
次ã«cat $padid.db | grep \"text\" | grep revNum | tail -1
ããã¹ãã¯val.atext.text
ã¢ã€ãã ã§ãããããcliã§json解æã§ããŸããå¿
èŠã«å¿ããŠæ¬¡ã«å®è¡ããŸããä»ã®ãšããããããã®ã³ãã³ããå®è¡ããŠã$ padidãPadIDã«çœ®ãæããŠãã ããã
sudo apt-get install jq
jqãã€ã³ã¹ããŒã«ãã次ã«cat $padid.db | grep \"text\" | grep revNum | tail -1 | jq .val.atext.text
ããã¹ãã ãã衚瀺ããŸãã
ãããããã¹ããããã¹ããã¡ã€ã«ã«æžã蟌ãã«ã¯cat $padid.db | grep \"text\" | grep revNum | tail -1 | jq .val.atext.text > $padid.txt
ããã§ãããããã¹ããã§ããŸããããããããã¹ããã¡ã€ã«ã«å ¥ããŠã€ã³ãââãŒãããããsetTextAPIãªã©ã䜿çšããŠãã ãã...
Lemmeã¯æœåºã倱æãããã©ãããç¥ã£ãŠããã®ã§ãå¥ã®ã¢ãããŒããæ€èšããŸãã
æœåºã¯å®è¡ãããŠããŸãããããªãé ãã§ãã CareCicle.dbãã¡ã€ã«ã§ã¯ãã¹ã¯ãªããããã§ã«20åéå®è¡ãããŠããéã«ãrevs ïŒ80ã«ææ°ã®è¡ã衚瀺ãããŸãã åé¡ã®ãããã«ã¯12k以äžã®ãªããžã§ã³ããããŸãã
ãããããã¯ã²ã©ãã§ã..ç§ã¯ããã80ã®æ¹èšã®åŸã«pad
ãªããžã§ã¯ããæ§ç¯ããããšãã§ããªããšæããŸã..ã¹ã¯ãªãããå®è¡ãããã®ã«30ç§ããããããããããªãã¯ãã§ãã
æåŸã®ææ¡ã¯ãããŒã¿ããŒã¹å šäœããã³ãããŠç§ã«éä¿¡ãããšãã倧ããªææ¡ã§ããããããã°ãå¿ èŠãªãã®ã解æããããã®ã¹ã¯ãªãããæžãããšãã§ããŸãã ãããã¯ãããã§ã¹ã¯ãªãããæžããŠã¿ãããšãã§ããŸããããã®ããã«æ©èœãããããã«ååŸããããšããããããããŸããã
ããã«ã¡ã¯@JohnMcLear ãã¹ã¯ãªããã¯ã€ãã«çµäºããŸããã ãªããããªã«æéãããã£ãã®ãïŒçŽ40æéïŒããããŸããã ãšã«ãããããã調ã¹ããšãã¹ãã¢ããŒãã«ãã100ã§å²ãåããæé«ã®ãªããžã§ã³ãéžæããããããããã¹ããæœåºããããšã§ãæŒç¿å šäœãå®è¡ã§ããããã«æããŸãã å°æ¥çã«ã¯æã§ãããè¡ãç æ°ã§ã:)ããªãã®å©ããã©ããããããšã
ãŸãã«ãã®éãã§ãããããŒã¿ããŒã¹ã¯ãšãªãå®è¡ã§ãããšæã蟌ãã§ãããšããŠãŒã¶ãŒããèšãããããšãå€ãã®ã§ãé¿ããããšããŠããŸãã ãªããããªã«æéãããã£ãã®ãç¥ã£ãŠãããšæããŸãããMySQL @ Etherpad 1.8.3ã䜿çšããŠããŸããïŒ
gitã®ææ°ã®ãã¹ã¿ãŒã䜿çšããŠããŸãïŒã©ã®ããŒãžã§ã³ãããããŸããïŒ
MySQLãæ³å®ãããšãä»æ¥ããããé©çšãããäºå®ã®ãã°ã¯æ¢ç¥ã§ãã
ã¯ããç³ãèš³ãããŸããããææ°ã®MariaDB-10.3.22-MariaDB
@JohnMcLearãã®ãã±ãããã¹ãã ããŠç³ãèš³ãããŸããããããªããèšåããMySQLãããã«æªè§£æ±ºã®åé¡ããããŸããïŒ etherpadã§ã®ããã©ãŒãã³ã¹ã®åé¡ãããã«ãã£ãŠè§£æ±ºããããã©ããã確èªãããã§ããããããšã
ããããä¿®æ£ããã«ã¯npm [email protected]ãå®è¡ããŠ
ãšããã§ãè¿œå ã®ããã¹ããä¿åããããã®æ°ããããžãã¯ãå«ãŸããŠããã®ã§ããããéããå¿ èŠããããŸãããåé¡ãçºçããå Žåã¯ãæ°ããåé¡ãäœæããŠããããåç §ããŠãã ããã ç Žæãæ€åºããããšãã«ãããããªã¢ã«ã¿ã€ã ã§åŸ©å ããèªåããžãã¯ãäœæããããšãäž»ãªç®çãšããŠãåé¡ã®åã ã®åå ã«ã±ãŒã¹ãã€ã±ãŒã¹ã§å¯ŸåŠããããšæããŸãã è æã¯é¿ããããªãã®ã§ãããã¯å€¢ã§ãã
ããã¯æè¿ããã«å°éãã人ã ãžã®ã¡ãã»ãŒãžã§ãïŒå€ãããŒãžã§ã³ã®etherpadããã¢ããã°ã¬ãŒãããå ŽåïŒã
ä»æ¥ãç§ã¯etherpadãµãŒãã¹ã1.6.3
ãã1.8.6
ã«ã¢ããã°ã¬ãŒãããŸããïŒãªããšããå€æŽ!!!!!ãã¹ãŠã®éçºè
ã«ããã§ãšãããããŸãïŒ
1ã€ã®ãããã«åé¡ãããããã§ãã«ãŒïŒcheckPadãcheckAllPadsãªã©ïŒããããæ€åºã§ããŸããã§ããïŒãŸãã¯ããšã«ããããŒããæ£åžžã«å®è¡ããæ¹æ³ãããããŸããïŒã
ç§ã¯settings.jsonã§charset
ãutf8mb4
ã§ããããšã確èªããŸããïŒæåŸã®ããŒãžã§ã³ã¯settings.json.template
ïŒã
"dbType" : "mysql",
"dbSettings" : {
"user": "etherpaduser",
"host": "localhost",
"port": 3306,
"password": "PASSWORD",
"database": "etherpad_lite_db",
"charset": "utf8mb4"
},
ã±ãŒã¹https://pad.example.com/p/my-broken-padã®å ŽåïŒ
mysql
update `store` set `value` = replace(`value`,'????','??') where `key` like "pad:my-broken-pad"
ãããŠããã¯åã³åããïŒtada ïŒïŒ unicorn ïŒïŒ sparklesïŒ
ãã®è§£æ±ºçã¯äžèšã®ãšããã§ããïŒè§£æ±ºçãèŠã€ããã®ã«åœ¹ç«ã€ããã«ã以åã®ã¡ãã»ãŒãžã«+1ãä»ããŸããïŒãããã£ãšæ確ã«ãããã£ãã®ã§ã
ããã§ã§ããããšã®1ã€ã¯ããã§ãã¯ããããšã ãšæããŸãã???? ãããã®å 容ã§ãææ¡ããã解決çãå«ãèŠåãæäŸããŸãã @ pedro-nonfree checkPad.jsãªã©ã«ããããéä¿¡ããŠããã ããã°ãåãã§ããŒãžããŸã:)
æãåèã«ãªãã³ã¡ã³ã
ããããšã©ãŒã¯ããªãã®ãã°ã«ãããŸãïŒ
åç §ïŒ https ïŒ