Här på andreask.se bloggar jag, Andreas Karlsson, egenföretagare och frilans inom webb och grafisk design, om det som ryms i min vardag.
Sedan en tid tillbaka har jag jobbat väldigt mycket tillsammans med Dabber, en trevlig webbyrå med fokus på video. Just nu jobbar vi med ett väldigt stort projekt där jag har ansvar för utvecklingen och att saker blir klara i tid. Till min stora glädje låg det även på min lott att plocka in en extern förmåga att hjälpa mig i utvecklingen. Så tidigare i veckan träffades jag och Erik Pettersson, som är – förutom en klippa på webb – en god vän, för att planera upp sommaren och projektet.
Det första steget blev givetvis att se över våra lokala utvecklingsmiljöer. I Leopard. Det som har skapat frustration och ominstallationer för mig under en lång tid. Men tack vare att Anton Lindqvist tipsade mig om hur han använt sig av MacPorts och hur han fått det att fungera bra så blev det inte fullt så krångligt som tidigare försök. Särskilt inte med tanke på att jag upptäckte hur man lätt avinstallerar allt man installerar med MacPorts. Efter ett par tre försök rullade allt på min ena dator, och med allt menar jag:
Fortsätt läsa så går jag igenom steg för steg hur jag gjorde. Om jag gjort fel någonstans, är otydlig, om det inte fungerar eller om det för den delen fungerar – lämna gärna en kommentar och hjälp mig på så sätt att förbättra det här inlägget.
Observera: vid ett par tillfällen i inlägget när vi ska redigera filer förekommer kommandot mate, det kräver att du har Textmate installerat. Har du inte det kan du lika gärna använda dig av till exempel pico eller vi.
Först av allt, se till att ha Xcode installerat, det krävs av MacPorts. Installera sedan MacPorts enligt anvisningarna på deras hemsida. När installationen är klar, öppna upp ett nytt Terminal-fönster för att vara säker på att kommandot port har laddats in.
Det kan vara bra att notera att det vi installerar med hjälp av port hamnar som standard i /opt/local/, läs mer om det på deras hemsida.
Leopard skeppas med Python 2.5, men för enkelhetens skull installerar vi Python på egen hand för att ha allt samlat på ett ställe och ha full koll på hela utvecklingsmiljön. Jag har valt att använda mig av Python 2.6 här, men det ska gå lika bra med någon annan version. Man kan även installera flera Python-versioner och sedan enkelt växla mellan dem, till exempel med python_select som vi strax kommer att installera.
$ sudo port install python26
$ sudo port install python_select
Sätt Python-versionen som vi nyss installerade till standard med hjälp av python_select och kontrollera att det är korrekt Python-version som körs:
$ sudo python_select python26
Selecting version "python26" for python
$ which python
/opt/local/bin/python
$ sudo port install mysql5-server
För att MySQL ska startas automatiskt vid uppstart:
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5-server.plist
Ta reda på var din server socket ligger och skapa följande symboliska länkar så att PHP och Pyhton fungerar med MySQL:
$ mysql_config5 --socket
/opt/local/var/run/mysql5/mysqld.sock
$ sudo ln -s /opt/local/var/run/mysql5/mysqld.sock /tmp/mysql.sock
$ sudo mkdir /var/mysql
$ sudo ln -s /opt/local/var/run/mysql5/mysqld.sock /var/mysql/mysql.sock
Slå av MySQL, skapa rotanvändare (root) och standarddatabasen och slå sedan på MySQL igen:
$ sudo launchctl unload -w /Library/LaunchDaemons/org.macports.mysql5-server.plist
$ sudo /opt/local/lib/mysql5/bin/mysql_install_db --user=mysql
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5-server.plist
Sätt ett lösenord för root:
$ mysql5 -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('password') WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
mysql> quit
För att kontrollera att allt har gått bra, prova att logga in som root med det nya lösenordet:
$ mysql5 -u root -p
För att MySQL och Python ska fungera tillsammans behöver vi installera följande koppling:
$ sudo port install py26-mysql
Börja med att kontrollera att Webbdelning under Systeminställningar » Delning är inaktiverat. Annars riskerar vi konflikter mellan Leopards inbyggda Apache och vår installation. Sedan kan vi påbörja installationen:
$ sudo port install apache2
För att Apache ska startas automatiskt vid uppstart:
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
Genom att lägga till ett alias för sudo /opt/local/apache2/bin/apachectl kan vi underlätta hanteringen av Apache. Öppna ~/.profile:
$ mate ~/.profile
Lägg till följande rad:
alias apache2ctl='sudo /opt/local/apache2/bin/apachectl'
När vi laddar om profilen ska vårt nyskapade alias börja fungera:
$ source ~/.profile
Efter omladdningen kan vi testa detta genom att exempelvis starta om Apache med:
$ apache2ctl graceful
mod_python är en Apache-modul som integrerar Python i servern. Installera den med:
$ sudo port install mod_python26
Innan modulen fungerar måste vi säga åt Apache att ladda in den, vilket vi gör senare i det här inlägget.
Subversion finns som standard i Leopard, men för att dubbelkolla att vi har det installerat kör vi:
$ svn --version
Skulle du inte ha det kan du enkelt installera det med:
$ sudo port install subversion
Det finns flera sätt att installera Django på, här kommer vi att använda oss av Subversion och kommandot svn.
Vi hämtar hem den absolut senaste (trunk) samt den senast stabila versionen till en lämplig mapp med hjälp av svn:
mkdir ~/svn
svn co http://code.djangoproject.com/svn/django/trunk/ ~/svn/django_trunk
svn co http://code.djangoproject.com/svn/django/tags/releases/1.0.2/ ~/svn/django-1.0.2
Sedan tar vi reda på var site-packages ligger:
$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages
Nu när vi vet det kan vi skapa en symbolisk där till den Django-version du vill använda dig av:
$ sudo ln -s ~/svn/django_trunk/django /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django
Det sista steget vi gör för Django är att skapa ytterligare en symbolisk länk för kommandot django-admin.py så att vi lätt kan använda kommandot oavsett vilken mapp vi befinner oss i:
$ sudo ln -s ~/svn/django_trunk/django/bin/django-admin.py /opt/local/bin/django-admin.py
$ sudo port install php5 +apache2 +fastcgi +imap +tidy +mysql5 +sqlite +pear +readline +sockets +t1lib
Innan PHP rullar som det ska med servern måste vi bland annat säga åt servern att ladda Apache-modulen för PHP, vilket är en av de sakerna vi ska göra härnäst…
$ mate /opt/local/apache2/conf/httpd.conf
Lägg till följande två rader i listan över moduler som Apache ska ladda, det är modulen för mod_python och för PHP:
LoadModule python_module modules/mod_python.so
LoadModule php5_module modules/libphp5.so
Leta reda på raden
#ServerName www.example.com:80
avkommenterad den och ändra den till
ServerName 127.0.0.1:80
Som standard pekar din server mot /opt/local/apache2/htdocs, personligen föredrar jag att använda mappen Sites (översatt till Webbsidor i Leopards grafiska gränssnitt), därför ändrar vi följande rad
DocumentRoot "/opt/local/apache2/htdocs"
och pekar istället DocumentRoot mot Sites:
DocumentRoot "/Users/username/Sites"
Vi ändrar även raden
<Directory "/opt/local/apache2/htdocs">
till att peka på samma mapp:
<Directory "/Users/username/Sites">
I det blocket sätter vi även
AllowOverride None
till
AllowOverride All
Som standard tittar vår server först och främst efter index.html när vi inte anger en specifik fil i vår sökväg. Där vill vi att Apache även ska titta efter index.php, sök reda på raden
DirectoryIndex index.html
och lägg till index.php:
DirectoryIndex index.php index.html
I blocket <IfModule mime_module> ska vi även lägga till följande rader för att servern ska tolka våra PHP-filer korrekt:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Starta sedan om servern för att ändringarna ska börja gälla:
$ apache2ctl graceful
Ett djupt andetag, det är dags. Ibland är det läge att börja om helt från scratch; sudo port -f uninstall installed. Hur kommer det sig att det blev så mycket krångligare att få till en bra lokal utvecklingsmiljö under OS X i och med Leopard? Frustration, det kan inte vara för mycket begärt. Nu gör vi ett nytt försök!