Cum să instalezi Memcached pe MAMP?

  Acasă » Jurnale » Blog claudiu.cristea » Cum să instalezi Memcached pe MAMP?  
 

Cum să instalezi Memcached pe MAMP?

Cuprins

Introducere

Memcache este un serviciu care îți permite să stochezi în memorie date arbitrare (șiruri, obiecte) sub formă cheie-valoare (key-value). Datele stocate sunt de regulă rezultate ale interogărilor bazelor de date, interogări API sau cache al paginilor web. De regulă Memcache se utilizează ca și backend pentru date volatile (cache) dat fiind faptul că servește informația din memorie și nu accesează hard-disk-ul.

Am fost nevoit să-mi instalez Memcache pe MacBook Pro deoarece acolo dezvolt o aplicație web Drupal care stochează cache-ul în memorie. Acest articol te va ghida în instalarea Memcache pe Mac OS X permițându-ți testarea aplicațiilor locale. Pe MacBook Pro aplicațiile web rulează MAMP pentru a asigura un mediu de dezvoltare Apache, MySQL, PHP.

Pe ce mediu am instalat?

Am instalat Memcache pe MacBook Pro având ca și sistem de operare Mac OS X 10.6.8. Pa acestă platformă folosesc MAMP 2.0.2 având: Apache 2.2.17, MySQL 5.5.9 și PHP 5.3.6. MAMP este abrevierea de la: Macintosh, Apache, MySQL și PHP. MAMP instalează în câteva secunde, pe Mac OS X, un mediu server complet.

Software necesar

Premergător instalării Memcache trebuie instalate următoarele instrumente:

MacPorts 2.0.3.
MacPorts este o inițiativă open-source destinată construirii unui sistem facil pentru compilare, instalare sau actualizare din linia de comandă pentru sistemul Mac OS X bazat pe pachete. Este similar APT sau YUM.
Apple Xcode Developer Tools
Xcode este o suită de instrumente (tools) create de Apple pentru dezvoltarea Mac OS X și iOS.

Dacă nu sunt instalate deja, consultă documentație aferentă fiecărui produs și instalează-le înainte de a trece la instalarea Memcache.

Instalarea Serviciului Memcache

Pentru instalare folosim pur și simplu MacPorts:

$ sudo port selfupdate
$ sudo port upgrade outdated
$ sudo port install memcached

Testează dacă serviciul a fost instalat cu succes:

$ memcached -h

Va trebui să returneze aproximativ următorul răspuns:

memcached 1.4.5
-p <num>      TCP port number to listen on (default: 11211)
-U <num>      UDP port number to listen on (default: 11211, 0 is off)
-s <file>     UNIX socket path to listen on (disables network support)
-a <mask>     access mask for UNIX socket, in octal (default: 0700)
-l <ip_addr>  interface to listen on (default: INADDR_ANY, all addresses)
-d            run as a daemon
-r            maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num>      max memory to use for items in megabytes (default: 64 MB)
-M            return error on memory exhausted (rather than removing items)
-c <num>      max simultaneous connections (default: 1024)
-k            lock down all paged memory.  Note that there is a
              limit on how much memory you may lock.  Trying to
              allocate more than that would fail, so be sure you
              set the limit correctly for the user you started
              the daemon with (not for -u <username> user;
              under sh this is done with 'ulimit -S -l NUM_KB').
-v            verbose (print errors/warnings while in event loop)
-vv           very verbose (also print client commands/reponses)
-vvv          extremely verbose (also print internal state transitions)
-h            print this help and exit
-i            print memcached and libevent license
-P <file>     save PID in <file>, only used with -d option
-f <factor>   chunk size growth factor (default: 1.25)
-n <bytes>    minimum space allocated for key+value+flags (default: 48)
-L            Try to use large memory pages (if available). Increasing
              the memory page size could reduce the number of TLB misses
              and improve the performance. In order to get large pages
              from the OS, memcached will allocate the total item-cache
              in one large chunk.
-D <char>     Use <char> as the delimiter between key prefixes and IDs.
              This is used for per-prefix stats reporting. The default is
              ":" (colon). If this option is specified, stats collection
              is turned on automatically; if not, then it may be turned on
              by sending the "stats detail on" command to the server.
-t <num>      number of threads to use (default: 4)
-R            Maximum number of requests per event, limits the number of
              requests process for a given connection to prevent 
              starvation (default: 20)
-C            Disable use of CAS
-b            Set the backlog queue limit (default: 1024)
-B            Binding protocol - one of ascii, binary, or auto (default)
-I            Override the size of each slab page. Adjusts max item size
              (default: 1mb, min: 1k, max: 128m)

Instalarea extensiei PHP Memcache

Putem descărca extensia binară Memcache dar e preferabilă compilarea extensiei PECL Memcache. Voi descrie aici metoda compilării pentru că ne ferește de folosirea unei extensii incompatibile.

Iată ce pași trebuie urmați:

Descarcă sursele extensiei Memcache. Cea mai simplă cale este:

$ cd
$ sudo pecl download memcache

Dacă comanda eșuează cu această eroare (eu am pățit-o):

Notice: unserialize(): Error at offset 276 of 1133 bytes in Config.php on line 1050 ERROR: The default config file is not a valid config file or is corrupted.

...încearcă să ștergi acest fișier:

$ sudo rm /Applications/MAMP/bin/php/php5.3.6/conf/pear.conf

Extrage sursele și intră în director:

$ tar xvfz memcache-2.2.6.tgz
$ cd memcache-2.2.6

MAMP nu conține fișierele header-ului PHP C așa că e nevoie să le legi (symlink) din directorul Apple Developer SDK. Vei observa că există directoarele:

  • /Developer/SDKs/MacOSX10.5.sdk
  • /Developer/SDKs/MacOSX10.6.sdk

Dacă ai PHP 5.2 trebuie să folosești 10.5. Pentru PHP 5.3 folosește 10.6 SDK.

$ sudo ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/include/ /Applications/MAMP/bin/php/php5.3.6/include

Din directorul memcache-2.2.6 rulează phpize pentru a crea fișierul de configurare:

$ cd ~/ memcache-2.2.6
$ sudo /Applications/MAMP/bin/php/php5.3.6/bin/phpize

Acum rulează „configure” folosind următoarea comandă:

MACOSX_DEPLOYMENT_TARGET=10.6 CFLAGS='-O3 -fno-common -arch i386 -arch x86_64' LDFLAGS='-O3 -arch i386 -arch x86_64' CXXFLAGS='-O3 -fno-common -arch i386 -arch x86_64' ./configure –with-php-config=/Applications/MAMP/bin/php/php5.3.6/bin/php-config

Comanda de mai sus compilează atât versiunea i386 (32 bit) cât și versiunea x86_64 (64 bit) și utilizează PHP config aparținând MAMP pentru a realiza asta.

După compilare construim biblioteca:

$ sudo make

La final copiem extensia în directorul de extensii PHP al MAMP:

$ sudo cp modules/memcache.so /Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/

Activează extensia Memcache prin editarea fișierului de configurare PHP:

$ sudo nano /Applications/MAMP/bin/php/php5.3.6/conf/php.ini

și adaugă extensia...

extension=memcache.so

Pornirea și oprirea serviciului cu MAMP

Acum Memcache este instalat și disponibil pentru MAMP. Ideal ar fi să configuram Memcache să pornească și să se oprească în același timp cu Apache odată cu folosirea butoanelor MAMP. Pentru aceasta trebuie să modificăm și să adăugăm niște scripturi de pe care MAMP le va folosi pentru pornirea sau oprirea Apache.

În exemplul nostru o dată cu pornirea sau oprirea serverelor MAMP vor porni sau se vor opri automat și 5 instanțe Memcache a câte 24 MB, aferent porturilor: 11211, 11212, 11213, 11214 și 11215.

Scripturile de pornire/oprire se află în /Applications/MAMP/bin:

$ cd /Applications/MAMP/bin

Creează următoarele 2 scripturi noi:

$ sudo nano startMemcached.sh
# /bin/sh
instances=5
 
for ((n=1; n<=$instances; n++))
do
((port=(11210+$n)))
/usr/local/bin/memcached -d -u nobody -m 24 -p $port
done

și

$ sudo nano stopMemcached.sh
killall memcached

Nu uita: noile scripturi trebuie să fie executabile:

$ sudo chmod +x startMemcached.sh stopMemcached.sh

De asemene modifică scripturile de pornire/oprire Apache astfel încât să aibă următorul conținut:

$ sudo nano startApache.sh
# /bin/sh
/Applications/MAMP/Library/bin/apachectl start
/Applications/MAMP/bin/startMemcached.sh

și

$ sudo nano stopApache.sh
# /bin/sh
/Applications/MAMP/Library/bin/apachectl stop 
/Applications/MAMP/bin/stopMemcached.sh

Voila! Memcache este instalat și configurat pe Mac OS X și va porni sau se va opri împreună cu Apache, de la butoanele de control MAMP.

Succes! :)

Comentarii

xcode-ul parca vine direct cu memecached-ul.

daca nu-i instalat xcode, unde ar fi nevoie de xcoe in procedura descrisa cu macports?

bogdan (neverificat), 7 Octombrie 2011 14:35

p.s. graba mare, am gresit. memcached diferit de extensia memcache pt php

bogdan (neverificat), 7 Octombrie 2011 14:47

Xcode este o suită de tools pentru programatori care poate fi descărcată de la Apple. Are cam 3GB :) Nu avem nevoie de Xcode pentru instalarea serviciului memcached. Acesta se instalează așa cum am spus folosind MacPorts.

În schimb dacă dorim să compilăm extensia PHP pentru Memcache (memcache.so) avem nevoie de Xcode pentru că ne instalează în sistem GNU Compiler Collection (gcc). Nu prea există alternativă.

În schimb există posibilitatea folosirii unui extensii binare gata compilate (memcache.so), aici toată problema este de compatibilitate. Mai simplu ar fi să instalezi extensia folosind utilitarul pecl

$ sudo pecl install memcache

După asta trebuie identificat unde s-a instalat memcache.so și trebuie făcut un symlink de genul /Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/memcache.so. Nu am testat această variantă.

Claudiu Cristea, 7 Octombrie 2011 14:53

Publică un comentariu nou

Conţinutul acestui câmp va fi considerat confidenţial şi nu va fi făcut public.
  • Adresele de situri web şi adresele de e-mail se transformă automat în linkuri.
  • Taguri HTML permiseŞ <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Liniile şi paragrafele sunt rupte automat.

Mai multe informaţii despre opţiunile de filtrare

   
   
 
 
  ©2007-2019, Claudiu Cristea. All rights reserved | Powered by Grafit SRL    Get Firefox!