MayaLabs Discussion Area

Suomeksi (Finnish only) => MLInvoiceen liittyvä keskustelu => Topic started by: taleman on 12.04.18 - klo:11:23

Title: Onko jo 1.17.0 tuotantokäytössä?
Post by: taleman on 12.04.18 - klo:11:23
Kokeilen 1.17.0 MLInvoicea testisaitilla. Se sanoo alkusivun vasemmassa ylänurkassa " 1.17.0 PrereleaseVersion", huolestuin onko tätä vielä tarkoitettukaan tuotantokäyttöön?

Olisin mieluusti odottanut .1 versiota, mutta Ajax virheitä on ruvennut tulemaan usein, päivittäin viime aikoina. Ne menee kyllä ohi kun painiketta klikkaa uudestaan, mutta kiusallisia ne on. Kerran tuli jo Ajax-virhe tässä 1.17.0 versiossakin, eli päivitys siihen ei taida auttaa tältä osin.

Kyselen siis
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: Ere Maijala on 13.04.18 - klo:17:01
Siinä versionumeron näytössä on sellainen bugi, että jos uusi versio on julkaistu samana päivänä kuin se on asennettu, tai uusimman version tarkistusta ei muusta syystä ole tehty, näyttää se tuon "PreleaseVersion" -tekstin (jonka olisi pitänyt olla käännetty). Ei se kuitenkaan oikeasti ole mikään esijulkaisu.


--Ere
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: taleman on 17.04.18 - klo:13:07
Pistin F12 ja konsoli on tuossa rinnalla. Tämmöisen virheen jo sain kiinni kun "Versiopäivitys"-painiketta klikkasin:
QuoteNavigated to http://mlharjoitus.mydomain.tld/mlinvoice/index.php?func=system&list=print_template
/mlinvoice/index.php?func=system&operation=update:1 GET http://mlharjoitus.mydomain.tld/mlinvoice/index.php?func=system&operation=update 500 (Internal Server Error)
Navigated to http://mlharjoitus.mydomain.tld/mlinvoice/index.php?func=system&operation=update

Versio siis 1.17.0, Debian 9.4 Stretch, PHP 7.0. PHP mode Fast-CGI.

Asiakaskohtaisia hintoja täytyy tutkia, en ymmärtänyt vielä niitä. Taisin saada sen vaikuttamaan jo, eli edistystä.
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: taleman on 17.04.18 - klo:14:31
Sain kiinni virheen konsolissa. Etsin laskua kirjoitettaessa laskuriville "Tuotteen nimi" -kenttään sisältöä valmiista tuotteista. Sanoi siinä pienessä popup-ikkunassa että "Loading failed". Konsolissa oli:

Navigated to https://laskutus.mydomain.tld/mlinvoice/index.php?func=open_invoices&list=invoice&form=invoice&listid=resultlist_open_invoices&id=1281
jquery-2.2.4.min.js?_=1506097488:4 GET https://laskutus.mydomain.tld/mlinvoice/json.php?func=get_selectlist&table=...rder_no,product_code,product_name&q=mato&pagelen=50&page=1&_=1523964019338 500 (Internal Server Error)
send @ jquery-2.2.4.min.js?_=1506097488:4
ajax @ jquery-2.2.4.min.js?_=1506097488:4
(anonymous) @ select2.min.js?_=1506097488:21


Toisella yrittämällä tämä viestin kirjoittamisen jälkeen toimi.
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: Ere Maijala on 17.04.18 - klo:14:45
Pääsetkö käsiksi PHP:n virhelokiin? Molemmat virheet tulevat palvelinpuolelta, joten sieltä pitäisi löytyä tarkempaa tietoa. Vaihtoehtoisesti tuon tuotteen valinnan yhteydessä voisi yrittää katsoa selaimen network-välilehdeltä, tai tuosta konsolikohdasta, mitä vastauksen sisältönä on.
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: taleman on 18.04.18 - klo:10:36
Unohdin eilen sanoa, eilinen ja alla oleva on tuotantosaitilta, siellä on MLInvoice 1.15.5. Sama webbipalvelin. En kerennyt testailemaan testisaitilla, koitan sieltä saada näitä virheitä kiinni jahka kerkiän. Saman näköinen oli sielläkin Ajax-virhe.

Katson löydänkö PHP:n virhelokista jotain. Sillä välin nyt tuli uusi virhe, ensin popup-ikkunassa:
DataTables warning: table id=list_product - Ajax error. For more information about this error, please see http://datatables.net/tn/7

Sitten selaimen F12 konsolissa tämä:
Navigated to https://laskutus.mydomain.tld/mlinvoice/index.php?func=settings&list=product
jquery-2.2.4.min.js?_=1506097488:4 POST https://laskutus.mydomain.tld/mlinvoice/json.php?func=get_list 500 (Internal Server Error)


Löysin error.log tiedostosta tämän, pitäisin nämä rivit on tuosta yllä olevasta virheestä:
[Wed Apr 18 10:19:05.790163 2018] [fcgid:warn] [pid 8804] [client 176.93.107.194:45418] mod_fcgid: stderr: Query 'DELETE FROM mlinvoice_session WHERE session_timestamp<?' with params array (, referer: https://laskutus.mydomain.tld/mlinvoice/index.php?func=settings&list=product
[Wed Apr 18 10:19:05.790202 2018] [fcgid:warn] [pid 8804] [client 176.93.107.194:45418] mod_fcgid: stderr:   0 => '2018-04-18 09:55:03',, referer: https://laskutus.mydomain.tld/mlinvoice/index.php?func=settings&list=product
[Wed Apr 18 10:19:05.790206 2018] [fcgid:warn] [pid 8804] [client 176.93.107.194:45418] mod_fcgid: stderr: ) failed: (1213) Deadlock found when trying to get lock; try restarting transaction, referer: https://laskutus.mydomain.tld/mlinvoice/index.php?func=settings&list=product


Etsin eilistä tilannetta tuosta samasta lokitiedostosta, sanoisin tässä on sen virheen rivit:
[Tue Apr 17 14:25:10.146384 2018] [fcgid:warn] [pid 28881] [client 176.93.107.194:45529] mod_fcgid: stderr: Query 'DELETE FROM mlinvoice_ses
sion WHERE session_timestamp<?' with params array (, referer: https://laskutus.mydomain.tld/mlinvoice/index.php?func=open_invoices&list=invo
ice&form=invoice&listid=resultlist_open_invoices&id=1281
[Tue Apr 17 14:25:10.146421 2018] [fcgid:warn] [pid 28881] [client 176.93.107.194:45529] mod_fcgid: stderr:   0 => '2018-04-17 14:01:09',, r
eferer: https://laskutus.mydomain.tld/mlinvoice/index.php?func=open_invoices&list=invoice&form=invoice&listid=resultlist_open_invoices&id=12
81
[Tue Apr 17 14:25:10.146425 2018] [fcgid:warn] [pid 28881] [client 176.93.107.194:45529] mod_fcgid: stderr: ) failed: (1213) Deadlock found
when trying to get lock; try restarting transaction, referer: https://laskutus.mydomain.tld/mlinvoice/index.php?func=open_invoices&list=invo
ice&form=invoice&listid=resultlist_open_invoices&id=1281
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: Ere Maijala on 18.04.18 - klo:17:57
Okei, tämä selittää. Vaikuttaa siltä, että PHP:ssa on sessioiden roskankeruu aggressiivisilla asetuksilla, jolloin todennäköisyys sille, että kaksi samanaikaista pyyntöä yrittää tuota kyselyä on suuri. Lisään siihen virheidenkäsittelyn, mutta kannattaisi myös tarkistaa, millaiset asetukset PHP:ssa on käytössä (esim. phpinfo() kertoo). Vaikuttavia asetuksia ovat ainakin session.gc_probability ja session.gc_divisor.
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: taleman on 19.04.18 - klo:13:11
Katsion phpinfo():lla tuolle webbisaitille:
session.gc_probability   0   0
session.gc_divisor   1000   1000
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: Ere Maijala on 19.04.18 - klo:16:57
Tuon perusteella sen ei pitäisi ajaa sessio-GC:tä ikinä. Ehkä fastcgi:ssä on jokin muu mekanismi, joka tekee sitä. Voisit kokeilla nyt joka tapauksessa, auttaako jos vaihdat sessionfuncs.php:sta dbSessionGc-funktion tällaiseksi:


function dbSessionGc($sessionMaxAge)
{
    if (!$sessionMaxAge) {
        $sessionMaxAge = 900;
    }
    // The query may fail if there are simultaneous requests, so don't let it cause
    // the request to fail
    dbParamQuery(
        'DELETE FROM {prefix}session WHERE session_timestamp<?',
        [
            date('Y-m-d H:i:s', time() - $sessionMaxAge)
        ],
        true
    );
    return true;
}
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: taleman on 24.04.18 - klo:10:39
Onko tuo koodi tulevasta versiosta? Nimittäin sekä 1.15.5 että 1.17.0 jotka minulla on käyttää funtiota db_session_gc ja myös  db_param_query eikä tuossa koodissa oleva  dbParamQuery funktio.
Näitä funktion nimen muutoksia lukuun ottamatta minulla jo oleva koodi on mielestäni whitespacen eroja lukuun ottamatta identtinen.

Päivitin jo tuotantokäyttöön MLINvoice 1.17.0, uskalsin viimein kun katsoin se on jo parempi kuin 1.15.5.
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: taleman on 24.04.18 - klo:10:50
Olisiko MLInvoicelle parempi käyttää PHP modena PHP-FPM?
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: Ere Maijala on 24.04.18 - klo:20:30
Äh, tosiaan funktioiden nimet ovat muuttuneet kehitysversiossa. Erona tuossa on siis vain se, että db_session_gc:ssä kutsuttaessa db_param_query-funktiota siinä on lopussa lisättynä yksi true-parametri. Eli tähän tapaan:

function db_session_gc($sessionMaxAge)
{
    if (!$sessionMaxAge) {
        $sessionMaxAge = 900;
    }
    db_param_query('DELETE FROM {prefix}session WHERE session_timestamp<?',
        [
            date('Y-m-d H:i:s', time() - $sessionMaxAge)
        ],
        true
    );
    return true;
}


Ei pitäisi olla väliä, millä mekanismilla käytetään. Sen sijaan huomasin juuri, että tuolla on myös session avauksessa gc-kutsu joka ikisen kerran, joten tekee reilusti ylimääräistä duunia. Pitää fiksata sekin järkevämmäksi.
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: taleman on 03.05.18 - klo:13:11
Nyt on tuotantokäytössä 1.17.0. Siinä tuli samantapainen deadlock-virhe (en ole vielä muuttanut koodia ehdotetulla tavalla, taidan muuttaa kohta).

Selaimen ikkunaan tulee ilmoitus
QuoteQuery 'DELETE FROM mlinvoice_session WHERE session_timestamp<?' with params array ( 0 => '2018-05-03 12:41:35', ) failed: (1213) Deadlock found when trying to get lock; try restarting transaction

F12 konsolissa näkyy:
QuoteFailed to load resource: the server responded with a status of 500 (Internal Server Error)
Title: Re: Onko jo 1.17.0 tuotantokäytössä?
Post by: Ere Maijala on 03.05.18 - klo:17:42
Senkin pitäisi jo auttaa, että ottaa db_session_open -funktiosta pois kutsun db_session_gc-funktioon. Eli siihen jää vain return true;.