Kategoriarkiv: Udvikling

Solution for Vagrant getting stuck on Enabling and configuring shared folders…

Danish Intro.

Normalt er min blog på Dansk, men dette indlæg vil være på Engelsk, da publikummet for løsningen på problemet jeg oplevede med Vagrant (http://www.vagrantup.com/) vil være et mere internationalt publikum.


My day job is as a Plone web developer working for a local municipality in Denmark, and all my development takes place on my Mac developing and testing up against a Ubuntu LTS server.

While setting up a new Plone installation within one of my VM’s (I use Vmware Fusion rather than the virtual box – Why? Because I use Vmware fusion when I need to run Windows, so I feel at home in Fusion), I decided to upgrade my Ubuntu VM so it had the latest packages and dist-updates. After I did the apt-get dist-upgrade I couldn’t get Vagrant to complete the up command.

Vagrant hangs and fails

Click for large image

I tried just about everything I could think of, and was about ready to give up on Vmware Fusion, and sftp into the VM and get my data and move it to to a new VirtualBox.

I had tried to install open-vm-tools, no luck, change type of share to nfs. I googled, I IRC’ed and so on.

As a last attempt I decided to uninstall open-vm-tools from the VM, and then reinstall Vmware Tools directly from Vmware Fusion itself.

There is a description here: http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1022525

Where the steps are:

Click for large image

Click for large image

 

 

 

 

 

After completing the steps I was again able to complete: vagrant up with shared folders.

Vagrant virtualiseret udviklingsmiljø

Vagrant_screenshotJeg arbejder som webudvikler i det offentlige, og der hvor jeg er, arbejder vi primært med Open Source teknologier på websiden (Plone, Drupal og custom Python/PHP scripts).

En del af vores hjemmesider er lavet i Plone, som er et CMS der ikke er så kendt i Danmark, men som bliver brugt af mange store organisationer: Nasa, CIA og FBI er nogle af de mere kendte af dem.

 

Udfordringer

Det kan nogle gange give lidt udfordringer at arbejde på et miljø for så at deploye på et andet. I dagligdagen arbejder jeg på en Macbook Pro (MBP), men vores produktionsmiljø er på en Ubuntu 12.04 LTS server.

Det er ikke så meget produktionsmiljøet der giver de store problemer, for Plone og Zope er optimeret til at køre på Linux (selv om der er installers til Mac og Windows). Det der kan give problemer på Mac kan være forskelle i encodings og et compiler miljø der måske er mere konservativt opdateret end selv en stable linux distro.

Er man så uheldig at man arbejder på Windows platformen, så er der en del webteknologier der bare ikke virker i den verden. Windows er i den grad bagefter når det kommer til understøttelse af nye webteknologier.

Men heldigvis er der en “redning”.

 

Traditionel virtualisering

Virtualisering er hverken nyt eller revolutionerende, men derfor kan anvendelsen af det godt revolutionere en gang imellem.

Mit workflow med Plone udvikling har været: Lokal kompilering af Plone på min MBP, udvikling i CodeKit, SublimeText, Coda og versionering via SourceTree (git klient).

Skulle jeg anvende almindelig virtualisering, så ville det typisk involvere at jeg skulle bruge VIrtualBox, Parallels eller Vmware Fusion, og oprette et Linux image derinde i. Herefter enten via NFS shares eller SFTP shares, have mine filer delt med mit virtuelle image. Problemet er at disse lokale mappings ofte har problemer med at blive korrekt opdateret, og de kan give små problemer når den virtuelle maskine er lukket ned – Finder kan hænge mens den forsøger at finde ud af hvad pokker der skete med drevet.

 

Vagrant – dejlig, simpel og stabil virtualisering

Jeg hørte om Vagrant via dette blog indlæg: http://www.stevemcmahon.com/steves-blog/developing-plone-in-a-box Det er primært rettet mod Windows brugere, som har haft det lidt hårdt med Plone udvikling efter som installeren på den platform ikke har været opdateret i meget lang tid.

Windows brugerne har været tvunget til at bruge Linux servere eller skifte platform for at kunne udvikle til Plone.

Vagrant er ikke rettet mod noget specifikt OS, og kan bruges på Mac, Linux og Windows, og det fungerer lige godt på de platforme.

Vagrant er et lag oven på VirtualBox, som er et Open Source Projekt der giver mulighed for at køre andre operativsystemer virtuelt.

Installationen er ret simpel.

Du har nu en virtuel maskine kørende på din computer, og skriver du: vagrant ssh så kommer du ind i Ubuntu’s terminal (du skal have putty installeret hvis du bruger Windows)

Som Plone udvikler bruger jeg følgende scripts til at sætte et udviklingsmiljø op hurtigt:
https://github.com/smcmahon/plonedev_vagrant (man kan tilpasse plone versionen i filen: https://github.com/smcmahon/plonedev_vagrant/blob/master/Vagrantfile

 

Hvad har jeg vundet?

Jeg har nu fået nemmere adgang til en udviklingsplatform, der matcher vores produktionsmiljø. Jeg har separeret evt. afhængigheder mellem min egen Platform (Mac OS) og vores servere, da jeg nu kan sørge for at min udviklingsplatform matcher vores produktionsplatform uden at skulle ændre mine favorit programmer til udvikling.
Jeg har fået et setup hvor jeg stadig kan udvikle i Mac OS men have mine ændringer til at slå igennem med det samme på min udviklingsplatform, uden at være afhængig af netværksdrev eller FTP opsætninger.

Jeg kan via scripting i Vagrant helt tilpasse mit udviklingssetup, så jeg hurtigt kan udvikle på de sites vi har i produktion.

Mac programmer jeg bruger på arbejdet

Macbay.dk er der ofte gode fif og tricks til forskellige apps medlemmerne af sitet bruger. Det fik mig til at tænke på at skrive hvad der er blevet til denne blogpost om de apps og metoder jeg bruger på min Mac i forhold til mit arbejde.

Min baggrund er at jeg arbejder med webudvikling (backend og frontend) i CMS’et Plone som er bygget oven på Zope og Plone. Plone er et CMS der ikke er så voldsomt kendt i Danmark, men det er med i toppen af poppen i udlandet. Organisationer som NASA, FBI og CIA er blandt de større der bruger systemet – ud fra at det er et af de mest sikre systemer med ganske få sikkerhedshuller gennem tiden (http://quintagroup.com/cms/plone/security).

Denne blogpost indeholder ikke en gennemgang af hvordan jeg bruger programmerne i detaljer, det er blot en liste over de programmer jeg bruger samt en kort beskrivelse. På et senere tidspunkt vil jeg gå mere i dybden med hvordan jeg bruger programmerne.

 

Grundlaget

En stor del af tiden foregår i Terminal hvor jeg styrer udviklingsserver (lokalt) og hvorfra jeg SSH’er til staging og production server (Ubuntu LTS servere).

 

Applikations listen

Sublime Text 2 (http://www.sublimetext.com/)

Source code skabes for det meste i Sublime Text 2, som har erstattet Textmate for mig (da det lå klart at det program mere eller mindre er dødt også selv om det nu er OSS).

Sublime Text har jeg valgt da det er cross platform og er en editor der har stort momentum i udvikler kredse.

Der findes OSS editore som VIM, Emacs osv. men selv om jeg har prøvet, så har jeg bare ikke kunnet vænne mig til deres workflow, hvorimod Sublime Text 2 har virket rigtigt fra start af.

Sourcetree app (http://www.sourcetreeapp.com/)

Jeg bruger Git til at holde styr på min sourcecode. Git er et distribueret versionsstyringsværktøj, som ikke er afhængigt af et centralt lager hvor udviklere indsender revisioner til. Subversion er det modsatte, nemlig et centraliseret lager. Begge dele har sine fordele og ulemper. Da jeg skulle vælge hvilket system jeg ville bruge, brugte jeg lidt tid på Google og der kunne jeg se at tendensen helt klart er at udviklere bevæger sig væk fra centraliserede versionsstyringssystemer over til de distribuerede.

Sourcetree app integrerer fint til online tjenester som Github (https://github.com/) og Bitbucket (https://bitbucket.org/). Jeg har valgt at bruge Bitbucket, da det giver gratis private repositories, hvor disse koster pænt meget ved Github.

Coda 2 (http://panic.com/coda/)

Jeg bruger Coda 2 udelukkende til SCSS (http://sass-lang.com/) og LESS (http://lesscss.org/) filer grundet dets ganske udemærket autocomplete og selectors til disse. Jeg bruger det ikke som kode editor da editoren ikke når Sublime Text 2 til sokkeholderne.

Pixelmator (http://www.pixelmator.com/)

Jeg er ikke grafiker, og har heller ikke de store grafiske evner så et billigt program som Pixelmator er mindst lige så godt for mig som Photoshop ville være det. Jeg ville dog ønske at det havde lidt flere af de samme muligheder som Fireworks har, men til prisen er det OK til mig.

Codekit (http://incident57.com/codekit/)

Webværktøj der indeholder de precompressors der bliver beskrevet herunder. Programmet er ikke nødvendigt, da man kan køre alle disse preprocessors direkte via Terminal, men det gør det meget mere simpelt kun at have et program kørende i stedet for at skulle holde styr på en lang række Terminal vinduer (og man behøver ikke at installere de forskellige precompressors da de er embedded i Codekit).

 

Sprog/frameworks jeg anvender

Python

Plone og Zope er bygget oven på Python (og en lille smule C), og udvides via Python. Python er et rigtig dejligt sprog, som efter PHP virker som et dejligt pust af frisk luft. Man skal dog lige vænne sig til at indentions er alfa og omega for ens scripts, men det er rart at slippe for at skulle bruge $ og ; hele tiden.

SCSS, LESS, Compass og Jade

Hvis man arbejder med CSS filer og ikke anvender en css preprocessor, så snyder man virkelig sig selv for at gøre CSS arbejdet nemmere og ikke mindst mere overskueligt.

Skal jeg starte på et nyt projekt med CSS er det SCSS (http://sass-lang.com/) jeg anvender sammen med Compass (http://compass-style.org/). Disse to giver mig en masse CSS muligheder med at skrive CSS der virker på tværs af flere generationer af browsere (og ja det er sgu altid lorte IE der er problemet). LESS bruger jeg mest når jeg skal tilpasse Twitters Bootstrap framework til et nyt site. LESS (http://lesscss.org) og SCSS minder meget om hinanden, men SCSS er lige en tand kraftigere og giver lidt flere muligheder.

SCSS og LESS koden er meget kortere end den CSS kode der bliver genereret, og det giver den fordel at det er meget lettere at overskue, og da det kan håndtere kode til forskellige browser versioner, så spare det også en for meget tid med at rode med css hacks.

Jade (http://jade-lang.com/) er en HTML template engine, som er en forkortet variant af HTML. Fordelen er igen at Jade koden er nem at læse og have et overblik over, og det er meget hurtigt at lave ens HTML om selv i komplicerede opbygninger, hvor man nemt kan miste overblikket.

Twitter Bootstrap (http://twitter.github.com/bootstrap/)

Før jeg opdagede Twitters Bootstrap framework brugte jeg ofte alt for lang tid på at opbygge den basale HTML kode på forskellige sites (og ikke mindst på at lave en opbygning der virker i flere varianter af Internet Explorer – jeg er stadig nødt til at supportere version 8 da det er den version der kører på vores terminal miljø.).

Grund opbygningen af Bootstrap gør at det kun er nogle få visuelle ting der ikke er mulige i f.eks. IE8, men selve strukturen skrider ikke og ødelægger ikke sitet

 

Diverse andre programmer

Alfred.app (http://www.alfredapp.com/)

Dette program er i gratis versionen ikke ret meget mere end en app launcher, og er ikke meget mere bevendt end Mac OS eget Spotlight, køber man dets PowerPack så sker der ting og sager, og så går det hen og bliver et meget kraftfuldt værktøj til at manipulere filer med eller til at udføre almindelige opgave.

Moom (http://manytricks.com/moom/)

Program til at kontrollere størrelse og placering af åbne vinduer uden at skulle bruge mus/trackpad. Jeg holder af at bruge tastaturgenveje hvor det er muligt, og med programmer som Alfred og Moom så er der rigtig mange ting jeg kan klare blot via tastaturet, hvor jeg ellers tidligere skulle igennem flere handlinger med trackpad for at opnå det samme

Hazel (http://www.noodlesoft.com/hazel.php)

Program der kører i baggrunden, og udfører forskellige handlinger på forskellige foldere. Jeg bruger dette mest til oprydning og standardbehandling af filer jeg modtager fra andre via Dropbox.

Dropbox (https://www.dropbox.com/)

Uundværlig cloud service – jeg tør næsten ikke tænke på hvor besværlig min hverdag ville være hvis ikke det havde været for Dropbox. Jeg bruger det fra alt til lokale repositories når jeg udvikler, til dokumenter, til deling mellem kolleger og familie, til lagring af programindstillinger. Der findes andre tjenester der kan det samme, men jeg har ikke prøvet nogen endnu som har været lige så pålidelig som Dropbox

Evernote (http://evernote.com/intl/da/)

Jeg bruger evernote primært som mødenotat værktøj, men også som drejebog for de sites jeg arbejder på. Ofte er det eksisterende hjemmesider jeg udvikler til, og der er tit problemstillinger i forhold til det nyudviklede, som jeg skal tage højde for når udviklingen er fuldført, og jeg skal til at implementere til live data (der aftales en frysning af indhold, og der opbygges et parallelt site med det nye konverterede indhold som så bliver til det nye live site). Der bruger jeg Evernote til at beskrive de steps jeg skal huske at gå igennem, eller de problemstillinger jeg ikke kan scripte mig ud af.

OmniFocus (http://www.omnigroup.com/products/omnifocus/)

Task management program. Jeg bruger Omnifocus på Mac, iPhone og iPad. Det giver et super overblik over de opgaver jeg sidder med og det er dejligt nemt at nedbryde de forskellige opgaver til små bidder som er overskuelige at gå i krig med. Tidligere brugte jeg en blanding af mails og papir noter, og på et eller andet tidspunkt bliver det så uoverskueligt at man er nødt til at skifte metode, og jeg fandt OmniFocus og GTD (http://en.wikipedia.org/wiki/Getting_Things_Done) som er den metodik det læner sig op ad.

 

Dette var en kort gennemgang af de programmer jeg anvender i min dagligdag på arbejdet med min Mac. Hvis du har spørgsmål om programmerne eller hvordan/hvorfor jeg bruger dem, så er du velkommen til at skrive en kommentar herunder.

Versionsstyring eller ej?

Som solo udvikler har jeg længe ikke set det store behov i at bruge versionsstyringsværktøjer, som CVS, Subversion, Mercurial eller Git. Jeg har haft mine filer liggende i Dropbox hvor der bliver gemt revisioner af mit arbejde i 30 dage.

Jeg har dog hele tiden haft lysten til at se nærmere på versions styringssoftware, om ikke andet så bare for at se om det kunne hjælpe flowet i mit daglige arbejde, og måske tilføje et ekstra lag af sikkerhed – ja og for at se om det var besværet værd.

I dag kunne jeg ikke finde på at starte et projekt uden at det lever i et Git repositiory.

 

Startede med Subversion

Jeg gik i krig med at se hvad der var af muligheder for gode versionsstyringsklienter på Mac (jeg foretrækker et visuelt værktøj indtil jeg er godt nok inde i metoderne til at kunne arbejde fra terminal.app). Da jeg startede med at researche kendte jeg ikke ret meget til de forskellige platforme for versionsstyring, men fandt frem til at Cornerstone (http://www.zennaware.com/cornerstone/index.php) var et af de mest roste værktøjer på Mac.

Cornerstone arbejder kun med Subversion, og giver et rigtig godt overblik over mulighederne med versionsstyring.

Videre research viste dog at der i udviklersamfundet er en stigende modvilje overfor Subversion og at alle de “seje” bruger Git til versionsstyring.

Jeg stødte ikke på nogle af de problemer der nævnes i forbindelse med Subversion, men det skyldes vist mest at jeg netop sidder som solo udvikler og ikke konstant skal have kode flettet sammen med andres.

Men jeg vil jo selvfølgelig ikke grave mig ned i et hul og fortsætte med at bruge et system, som mange klager over i team sammenhæng.

Læs resten