Onko jo 1.17.0 tuotantokäytössä?

Started by taleman, 12.04.18 - klo:11:23

Previous topic - Next topic

taleman

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

  • onko jollakulla 1.17.0 jo tuotantokäytössä?
  • mitä asiakaan hinta tarkoittaa tuoteluettelossa? Minusta siihen tulee sama kuin  yksikköhinta, vaikka muuttelen alennuksia.
  • Versiopäivitys-painikkeesta tulee teksti " Päivitettävyyden tarkistus", mutta muuta näkyvää ei tapahdu. Toki vielä ei ole uudempaa versiota, mutta tuo ei kerro mikä oli tarkistuksen tulos.
  • Pitäisikö noita Ajax-virheitä alkaa jäljittämään? Niitä ei saa luotettavasti toistettua, ei ole vielä kertaakaan toisella  yrittämällä tullut myös virhettä, eli tarkempaa virheilmoitusta ei taida saada näkyviin.

Ere Maijala

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.


  • On.
  • Asiakaskohtaisten hintojen pitää olla voimassa, jotta ne näkyisivät. Valitsitko siis voimassaoloajan tulevaisuuteen tai ilman voimassaoloa?
  • Pitäisi tulla lisäksi tieto siitä, onko uusin versio jo käytössä tai löytyikö päivitys. Tai virheilmoitus, jos tarkistus epäonnistui. Tuleeko selaimen konsoliin mitään virhettä tms?
  • Olisihan se hyvä saada selville syy. Minä en niitä ole onnistunut saamaan aikaiseksi. Voisitko ottaa selaimen konsolin auki, ja kun virhe tulee, käydä vähän läpi "json.php?func=get_list" -osoitteeseen lähetettyjä POST-pyyntöjä josko niistä jokin epäonnistuisi tai vastauksena tulisi jotain muuta kuin JSONia? Jos ei virheen syytä saada selville, ei ole seuraavaankaan versioon luvassa parannusta, koska en tosiaan ole onnistunut saamaan virhettä aikaiseksi.

--Ere

taleman

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ä.

taleman

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.

Ere Maijala

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.

taleman

#5
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

Ere Maijala

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.

taleman

Katsion phpinfo():lla tuolle webbisaitille:
session.gc_probability   0   0
session.gc_divisor   1000   1000

Ere Maijala

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;
}

taleman

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.

taleman

Olisiko MLInvoicelle parempi käyttää PHP modena PHP-FPM?

Ere Maijala

Ä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.

taleman

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)

Ere Maijala

Senkin pitäisi jo auttaa, että ottaa db_session_open -funktiosta pois kutsun db_session_gc-funktioon. Eli siihen jää vain return true;.