Categorieën
Linux Mac WordPress

Sublime Text 3 en SourceTree openen via command line (CLI)

Als WordPress ontwikkelaar maak ik veel gebruik van de command line. Tijdens het ontwikkelen van WordPress oplossingen werk ik namelijk veel met command line tools zoals git, npm, grunt, gulp, composer, etc. Andere zaken regel ik weer liever via een app. Gelukkig kunnen deze vaak ook eenvoudig via de command line opgestart worden. Voor Sublime en SourceTree gebruik ik daarvoor de volgende commando's:

Sublime Text 3

➜ wp-pronamic-ideal git:(develop) subl .

SourceTree

➜ wp-pronamic-ideal git:(develop) stree .

Deze commando's openen automatisch Sublime Text 3 of SourceTree met de huidige project map. Hoe je deze commando's beschikbaar kunt maken is te lezen in de volgende artikelen:

Categorieën
Twinfield

Twinfield storing 4-9 januari 2018

Helaas begint het jaar voor Twinfield met de nodige storingen. Op 4 januari gaf ik al via Twitter dat het genereren van een PDF-factuur ruim 30 minuten duurde:

Twinfield reageerde daar erg vlot op en gaf ook binnen een uur aan dat alles weer op volle snelheid zou moeten functioneren:

Zo'n snelle reactie zonder toelichting waarom Twinfield zo traag reageerde geeft mij als programmeur niet veel vertrouwen. Ik vraag me dan al snel af of er überhaupt naar de oorzaak van de vertraging is gezocht.

Een paar dagen later blijkt ook wel dat Twinfield hier waarschijnlijk niet heel goed naar gekeken heeft. In de periode van 4 t/m 9 januari klagen namelijk meerdere gebruikers over de traagheid. Inmiddels toont Twinfield ook binnen het dashboard hier een melding over:

De snelheid op het accounting cluster is langzamer dan u gewend bent. Wij werken aan een oplossing.

Twinfield

Naast bovenstaande melding is tijdens het werken in Twinfield ook goed te merken dat het systeem niet stabiel draait. Zo zien wij regelmatig de volgende 500-meldingen:

Deze issues komen met het einde van 2017 en het 4e kwartaal op een vrij ongunstig moment. Hopelijk weet het Twinfield team het probleem snel op te lossen. En hopelijk geven ze dit keer ook goed aan het wat het probleem precies was en hoe dit in de toekomst voorkomen gaat worden.

Update 11 januari 2018

Inmiddels zijn we 2 werkdagen verder en helaas heb ik nog niks van Twinfield vernomen. Tijdens het werken in Twinfield komen er echter nog wel zeer regelmatig fouten voorbij, bijvoorbeeld:

An error occurred on the server. Always include the following error reference when you report this error: 11/01/2018 P92376.

Twinfield
Categorieën
Geen categorie

cPanel Let’s Encrypt “There was a problem installing the certificate”

Webontwikkelaars die werken met cPanel en Let’s Encrypt zijn ongetwijfeld wel eens de volgende melding tegen gekomen:

There was a problem installing the certificate. Please contact support for more information.

Het kan soms lastig om te achterhalen wat precies het probleem was. Vaak kan de support afdeling van de hostingleverancier je dan verder op weg helpen. Als je SSH-toegang hebt tot het betreffende hosting pakket kun je vaak ook via die weg zelf achterhalen waar het fout gaat. Voordat je binnen cPanel het Let’s Encrypt certificaat installeert maak je dan via SSH verbinding. Vervolgens roep je daar het volgende commando aan:

tail -f ~/.letsencrypt/logs/letsencrypt.log

Op die manier krijg je realtime alle nieuwe logs binnen je terminal te zien. Vervolgens ga je via cPanel het Let’s Encrypt installeren en hou je je terminal in de gaten. Wat ik vaak voorbij zien komen is dat de DNS-records voor de betreffende domeinnaam niet goed zijn ingesteld. In de logs zijn dan vaak de volgende meldingen terug te zien:

example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://example.com/.well-known/acme-challenge/...
Categorieën
Twinfield

Twinfield storing 29 en 30 oktober 2017

Op 29 oktober zag ik toevallig op Facebook een melding van Twinfield voorbij komen over een storing:

Twinfield zegt op 29 oktober om 17:39:

Op dit moment is de Twinfield webdienst niet beschikbaar, het is niet mogelijk om in te loggen. We werken hard aan een oplossing, excuses voor het ongemak.

Voor veel Twinfield klanten kwam deze storing niet op het juiste moment i.v.m. de verwerking van de 3e kwartaal btw-aangifte. Ik was daarom wel benieuwd naar hoe Twinfield dit verder zou afhandelen. Later op de avond geeft Twinfield via Facebook meerdere keren aan dat er hard wordt gewerkt aan oplossing:

Twinfield zegt op 29 oktober om 20:18:

Hallo Inge en Geke, we zijn er met man en macht aan bezig. Het is een erg lastig probleem. Wanneer we iets kunnen melden, dan doen we dat direct. Excuus voor het ongemak.

Op dit moment geeft Twinfield al wel aan dat het een ‘erg lastig probleem’ is. Ik vind het dan altijd wel jammer dat er niet bij vermeld wat het precies zo lastig maakt. Er is blijkbaar wel geconcludeerd dat het lastig is, maar wat maakt het dan precies zo lastig?

Voor zover ik kan zien heeft Twinfield om 21:35 een laatste update gestuurd via Facebook:

Twinfield zegt op 29 oktober om 21:35:

Hi Ellen, ik hoop het, maar ik durf er nog niets over te zeggen. Het is erg lastig op te lossen, begrijp ik van de collega’s, die er hard aan werken. Excuus!

De volgende update via Facebook is de volgende ochtend:

Twinfield zegt op 30 oktober om 11:19:

Update 10:00u – Tijdens het onderzoek van het probleem hebben we een ongewone hoeveelheid verkeer gedetecteerd naar de Twinfield-webdienst. Als voorzorgsmaatregel hebben we Twinfield online boekhouden niet beschikbaar gemaakt. Er wordt hard gewerkt aan een oplossing. Onze excuses voor het ongemak!

Na een hele avond (en nacht?) hard werken is er een ongewone hoeveelheid verkeer gedetecteerd naar de Twinfield-webdienst. Persoonlijk vind ik zo’n update wel vrij mager als je de avond daarvoor meld dat er hard wordt gewerkt aan een oplossing.

Twinfield zegt op 30 oktober om 17:07:

Update 16:00u – Op dit moment kunnen we bevestigen dat onze storing het gevolg is van een ddos incident gericht op Twinfield. Door een aantal webservers werd een ongebruikelijk grote hoeveelheid data op Twinfield afgevuurd. Zoals eerder gemeld hebben we de webdienst uit voorzorg offline gehaald. We hopen snel weer online te zijn. Excuses voor het ongemak.

In mijn beleving staat ‘ongewone hoeveelheid verkeer’ wel enigszins gelijk aan ‘ddos incident’. Wat dat betreft vind ik deze update na 6 uren dan ook wel vrij minimaal.

Twinfield zegt op 30 oktober om 18:03:

We zijn blij om u te informeren dat de Twinfield webdienst weer online is.

Zoals gezegd kunnen we bevestigen dat de ongewone toename van het dataverkeer het gevolg is van een ddos-incident (distributed-denial-of-service). Zoals eerder gedeeld, hebben we de webdienst offline gebracht als een voorzorgsmaatregel, en op dit moment is er, buiten de onderbreking van beschikbaarheid, geen andere impact op klanten geïdentificeerd.

Op dit moment is het niet mogelijk om in te loggen op Twinfield online boekhouden via onze website op http://taxnl.wolterskluwer.com. Om toegang te krijgen tot het systeem gebruikt u onze beveiligde loginpagina https://login.twinfield.com.

Onze teams hebben gewerkt met standaardprotocollen om de webdienst zo snel mogelijk weer beschikbaar te maken. We beseffen dat deze situatie u tijdens een cruciale tijd heeft beïnvloed en we verontschuldigen ons voor het ongemak.

We blijven de activiteit rondom de webdienst volgen en informeren u uiteraard opnieuw als we opnieuw ongewone activiteit detecteren.

Om 18:03 kreeg ik per e-mail bericht dat de Twinfield webdienst weer online is. Wat ze hier precies bedoelen met ‘gewerkt met standaardprotocollen’ is me niet helemaal duidelijk. In ieder geval fijn dat de Twinfield webdienst weer online is.

Twinfield zegt op 31 oktober om 15:08:

Zoals u wellicht weet hebben we de afgelopen 48 uur te maken gehad met een ddos-incident (een ddos-incident is een poging van een onbekende partij om een online dienst te overweldigen met dataverkeer uit meerdere bronnen, waardoor de online dienst onbereikbaar wordt). Uit voorzorg hebben we de Twinfield webdienst offline gehaald en maatregelen genomen waardoor we de webdienst gistermiddag weer online hebben gebracht. Onze excuses voor het ongemak.

Het ddos-incident is externe activiteit die buiten onze controle valt. We hebben dit incident aan de juiste autoriteiten gerapporteerd. Naast de onderbreking van onze dienstverlening is er geen andere impact op klanten geïdentificeerd. We hebben tot nu toe geen bewijs voor penetratie van, inbraak in of vernietiging van klantgegevens. We blijven de activiteit rondom de webdienst volgen en nemen contact met u op als we ongewone activiteit detecteren.

Bij dit bericht vraag ik me af wat voor maatregelen er dan precies zijn genomen. Ook vind ik het jammer dat ze niet vermelden aan welke autoriteiten het incident is gerapporteerd. Verder begrijp ik ook niet wat Twinfield precies wil zeggen met de zin: “Het ddos-incident is externe activiteit die buiten onze controle valt.”.

Ik heb zelf gelukkig geen hinder gehad van de Twinfield storing, maar vind het wel jammer dat Twinfield niet duidelijker communiceert. Hopelijk gaat Twinfield bovenstaande zaken nog ophelderen en kunnen we in de toekomst zonder al te veel issues met Twinfield blijven werken.

Categorieën
WordPress

Verwijderen van WordPress berichten in bulk traag door Sucuri

Onlangs liepen we bij Pronamic tegen “504 Gateway Timeout” fouten aan bij het verwijderen van (veel) WordPress berichten de WordPress admin omgeving. In eerste instantie dachten we aan een hosting issue, maar al snel bleek dat een plugin de boosdoener was. Het kan echter soms lastig zijn om te achterhalen welke plugin de veroorzaker is. Plugins kunnen op allerlei filter/actie hooks inhaken en zaken vertragen. In dit geval trad het probleem op bij het verwijderen van berichten. Door de WordPress code te bekijken kwamen we er snel achter dat WordPres bij het verwijderen van berichten o.a. de wp_trash_post en deleted_post actie uitvoert:

Met 20+ actieve plugins en duizenden bestanden blijft het echter zoeken naar een speld in een hooiberg. Gelukkig hebben we vaak SSH-toegang tot onze hosting omgevingen en kunnen we met een eenvoudig commando snel zoeken:

  • grep --recursive --include="*.php" "deleted_post" .
  • grep --recursive --include="*.php" "trash_post" .

Hieruit bleek al snel dat de “Sucuri Security” plugin de boosdoener was. Deze plugin communiceert elke bericht verwijdering door naar de Sucuri API. Doordat voor elk bericht een HTTP-request werd uitgevoerd ontstond er een enorme vertraging bij het verwijderen van berichten.

Deze API-communicatie kan gelukkig eenvoudig uitgeschakeld worden via de Sucuri plugin instellingen pagina:

SSH-toegang en tools zoals grep kunnen goed helpen bij het opspeuren van dergelijke problemen.

Categorieën
Hosting Linux WordPress

WordPress network/multisite cron vervangen met Linux cron SiteGround

Veel WordPress ontwikkelaars zijn geen fan van de standaard WordPress cron functionaliteit. Vaak wordt daarom geadviseerd om de WordPress cron te vervangen met een Linux cron. De meeste artikelen adviseren om in wp-config.php de WordPress uit te schakelen via define( 'DISABLE_WP_CRON', 'true' ); en via cPanel of DirectAdmin een Linux cron in te stellen:

/usr/local/bin/php /home/user/public_html/wp-cron.php

Voor een eenvoudige WordPress installatie werkt dit vaak goed, maar binnen een WordPress network/multisite installatie wordt het vaak al lastiger. Als je je website host bij SiteGround is dit echter ook een fluitje van een cent. De volgende WP-CLI commando komt hier namelijk goed bij van pas:

wp site list --path=/home/user/public_html --deleted=0 --field=url | xargs -I {} wp cron event run --due-now --path=/home/user/public_html --quiet --url={}

Bovenstaand commando bestaat eigenlijk uit 2 commando’s, één voor het opvragen alle sites en één voor het uitvoeren van de verlopen cron events:

  1. wp site list --path=/home/user/public_html --deleted=0
  2. wp cron event run --due-now --path=/home/user/public_html --quiet --url={}

Met behulp van het xargs command geven we de output van het eerste commando door aan het tweede commando. Op die manier worden de verlopen cron events van alle (niet verwijderde) websites uitgevoerd.

Resources

Categorieën
Linux Mac PHP WordPress

Homebrew, PHP 7.1 en cURL error 56: SSLRead() return error -9806

Na het installeren van PHP 7.1 via Brew kreeg ik via de WordPress HTTP API soms de volgende foutmelding te zien:

cURL error 56: SSLRead() return error -9806

Ik was deze fout wel vaker tegen gekomen, maar het is altijd weer even zoeken naar de oplossing. Het belangrijkste is dat er gewerkt wordt Homebrew curl en openssl:

brew uninstall git
brew uninstall curl

brew install openssl
brew install libressl

brew install curl --with-openssl

brew install php71 --with-homebrew-curl --with-homebrew-libressl --build-from-source
brew install php71-xdebug
brew install php71-mcrypt

Verder zijn ook de volgende Homebrew packages handig om te installeren:

brew install svn

brew install git --with-brewed-curl --with-brewed-openssl --with-brewed-svn --without-completions
brew install git-ftp
brew install git-flow

brew install composer
brew install php-code-sniffer
brew install phpmd
brew install phpunit
brew install phpmyadmin

Update 29 augustus 2017

Bovenstaande commando’s lijken het probleem niet altijd op te lossen. Eventueel kan onderstaande dan geprobeerd worden:

brew reinstall curl --with-openssl

De Homebrew curl formule is ‘keg-only’, maar om er zeker van te zijn dat Homebrew curl formule gebruikt wordt linken we deze wel:

brew link curl --force

Ook zorgen we er voor dat de Homebrew curl formule gebruikt wordt in de shell:

echo 'export PATH="/usr/local/opt/curl/bin:$PATH"' >> ~/.zshrc

Als het goed is geeft het volgende commando nu het volgende resultaat:

curl --version
curl 7.55.1 (x86_64-apple-darwin16.7.0) libcurl/7.55.1 OpenSSL/1.0.2l zlib/1.2.8 libssh2/1.8.0
Release-Date: 2017-08-14
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy

Met name de OpenSSL/1.0.2l is hierbij belangrijk. Daarna gaan we PHP 7.1 opnieuw installeren met Homebrew curl:

brew reinstall php71 --with-homebrew-curl

Als het goed is geeft het volgende commando nu het volgende resultaat:

php -i | grep "SSL Version"
SSL Version => OpenSSL/1.0.2l

Bronnen

Categorieën
PHP WordPress

WordPress plugin testen met PHPUnit – mysqli_query(): Couldn’t fetch mysqli

Verschillende WordPress plugins die we ontwikkelen bij Pronamic testen we automatisch. Hiervoor maken we gebruik van de WordPress test repository https://develop.svn.wordpress.org/ en PHPUnit. Voor onder andere de Pronamic iDEAL plugin maken we hier al een aantal jaren gebruik maken. Echter na het bijwerken naar de laatste versie van de WordPress test repository https://develop.svn.wordpress.org/ liep ik tegen de volgende foutmelding aan:

mysqli_query(): Couldn't fetch mysqli

In eerste instantie kon ik niet achterhalen waar wat fout ging, maar na lang zoeken en overleg met mijn collega Reüel heb ik hier wat meer informatie over kunnen vinden. In een WordPress.org support topic van 1½ maand geleden werd dezelfde foutmelding genoemd: https://wordpress.org/support/topic/wp_unittestcaseteardown-causes-mysqli_query-couldnt-fetch-mysqli/. Ryan McCue verwijst daar weer naar WordPress Trac ticket 39327. Hij beschrijft hier ook direct een oplossing:

Tracked this down a bit with @pento; it turns out to be a problem with PHPUnit’s global backups, and can be fixed by setting protected $backupGlobals = true in the test class. The key is that PHPUnit serialises the data and unserialises it to restore it.

Vervolgens geeft @pento later in een reactie ook aan hoe dit probleem het beste opgelost kan worden:

For an immediate plugin fix, the best option is to add backupGlobals=”false” to your phpunit.xms.dist.

Plugins zoals bijvoorbeeld Easy Digital Downloads hebben dit ook opgenomen in hun phpunit.xml  bestand: https://github.com/easydigitaldownloads/easy-digital-downloads/blob/master/phpunit.xml. Na het toevoegen van backupGlobals="false" is het probleem ook daadwerkelijk opgelost.

Categorieën
Geen categorie

Schermafbeelding venster schaduw Mac OS uitschakelen

Als WordPress webontwikkelaar bij Pronamic maak ik veel gebruik van de Mac OS schermafbeelding functionaliteit (cmd ⌘ + shift ⇧ + 4 » spatie). Voornamelijk voor blog berichten, support en documentatie doeleinden komt deze functionaliteit goed van pas. Wat ik minder mooi vind is de schaduw rondom schermafbeeldingen van Mac OS applicatie vensters. Na een zoektocht via Google blijkt dit eenvoudig uitgeschakeld te kunnen worden. Door het uitvoeren van de volgende commando in de terminal is dit uit te schakelen:

defaults write com.apple.screencapture disable-shadow -bool true

Hierna zal SystemUIServer herstart moeten worden om de wijziging actief te maken:

killall SystemUIServer

Schermafbeelding met venster schaduw 

Schermafbeelding zonder venster schaduw

Uiteraard kan de schaduw ook weer ingeschakeld worden:

defaults write com.apple.screencapture disable-shadow -bool false

Bron: http://osxdaily.com/2011/05/23/disable-shadow-screen-shots-mac/

Categorieën
WordPress

Test de WordPress XML-RPC interface

Bij problemen met de WordPress XML-RPC interface zijn er verschillende manieren om de werking te testen:

Jetpack

https://jetpack.wordpress.com/jetpack.testsite/1/?url=https://www.pronamic.nl/xmlrpc.php

cURL

curl -d "<?xml version="1.0" encoding="iso-8859-1"?> <methodCall><methodName>demo.sayHello</methodName></methodCall>" https://www.pronamic.nl/xmlrpc.php