Attualmente il mio ambiente di sviluppo è Ubuntu v12.04 con VMWare. Lavoro interamente all'interno della VM, con la GUI completa e utilizzo la condivisione di file samba in Ubuntu solo se devo accedere ai file dal mio sistema operativo host che è Windows 7. Normalmente accedo e mappa un'unità di rete tramite l'IP interno del VM via NAT per il collegamento in rete alla VM. L'uso di altre soluzioni si è rivelato molto più lento come le cartelle condivise di VMWare. L'ho disabilitato nelle impostazioni dell'immagine VMWare. Tuttavia, installo gli strumenti VMWare per consentire una facile copia / pasta sul mio computer host e viceversa.
Come ha sottolineato Matthias Zeis, fai attenzione nella scelta delle cartelle di rete / condivise con la tua VM, poiché alcune si riveleranno problematiche.
Ero un precedente utente di VirtualBox, ma trovavo VMWare più stabile e con prestazioni accettabili (almeno per me). Eseguirò comunque i tuoi test per soddisfare al meglio le tue esigenze e necessità, ad es. Vagrant utilizza VirtualBox.
IDE:
stavo usando Netbeans abbastanza ampiamente come IDE di mia scelta, ma da allora sono passato a una soluzione più leggera come Sublime Text 2 . Raramente aprirò Netbeans principalmente per scopi di X-Debug e refactoring più semplice. Netbeans, PHPStorm, Eclipse, ecc. Sono tutti IDE basati su Java e possono essere molto affamati di risorse.
HARDWARE:
per aggiungere altro, l'hardware sarà sempre un ruolo chiave nelle prestazioni (ovviamente). Se i tuoi sviluppatori stanno ancora utilizzando l'HDD piatto, proverei a investire in SSD per loro. Poiché Magento ha una grande quantità di file / cartelle accelererà notevolmente le prestazioni degli sviluppatori. Durante lo sviluppo: con tutta la memorizzazione nella cache disattivata e mentre attraversi semplicemente l'albero delle cartelle in SVN / GIT o il tuo IDE. Dare alla tua VM abbastanza RAM è altrettanto importante.
La mia macchina host: Samsung SSD 512 GB di spazio su disco, Win7 (64 bit), 8 GB di RAM, i7 2,4 GHz (8 core)
La mia macchina virtuale: SSD Samsung, spazio su disco da 30 GB, Ubuntu 12.04 (32 bit), 3 GB di RAM, i7 (4 core assegnati).
DOMANDE DA CHIEDERE:
La domanda più grande è: creare un'immagine VM per sviluppatori leggera e riutilizzabile su più progetti o creare un'immagine per progetto. In precedenza stavo provando a fare macchine virtuali più piccole in base al progetto, tuttavia la riconfigurazione costante per andare avanti con il mio flusso di lavoro di sviluppo è diventata troppo complicata e ora uso una macchina virtuale più grande e faccio del mio meglio per mantenere ogni progetto il più possibile isolato.
Mantenere OS, IDE, stack LAMP, aggiornamenti / configurazioni, ecc. Può diventare un compito ingrato se la route scelta è rappresentata da più VM per progetto. In definitiva, porta a tempi di sviluppo più lunghi (e anche a tempi non fatturabili ancora peggiori per le configurazioni dell'ambiente locale).
Anche questo mi è stato utile, dato che sono stato in grado di accedere rapidamente ad altri file di progetto senza la necessità di aprire una nuova macchina virtuale e tagliare ulteriormente l'hardware del mio host. Il rovescio della medaglia è idealmente vorrei che ogni progetto venisse messo a tacere da altri progetti per prevenire eventuali problemi imprevisti con l'ambiente (es. Php.ini, my.cnf, httpd.conf, ecc.). Finora il compromesso di avere tutti i progetti facilmente accessibili si è rivelato più intraprendente.
Ancora una volta questo dipende dalle vostre esigenze e necessità, quindi valutatele prima.
RISPOSTE:
che porta al feedback. Ricevi il maggior numero possibile di input dai tuoi sviluppatori. In definitiva, i loro requisiti devono essere soddisfatti e i loro problemi devono essere compresi prima che una soluzione adeguata possa essere impostata e messa in atto. Ognuno ha flussi di lavoro diversi e non tutti sono a proprio agio nel lavorare nel sistema operativo che è possibile scegliere per lo sviluppo. La mia regola empirica è lasciare che lo sviluppatore scelga il proprio sistema operativo e l'IDE in cui si trova più a suo agio e con i migliori risultati. Quindi anche una VM Linux senza testa leggera può rivelarsi utile per le loro esigenze, ma ovviamente può incorrere nel problema della condivisione delle cartelle attraverso la rete locale tra l'host e la VM.
PORTABILITÀ:
Ho anche giocato con l'idea di mantenere la mia immagine VM su qualcosa come Dropbox in modo da potervi accedere facilmente in qualsiasi momento potessi aver bisogno. Dal momento che servizi come Dropbox si confrontano bit per bit di ciò che è archiviato, mi è sembrato logico che solo i bit che ho cambiato sarebbero stati sincronizzati. Tuttavia, ciò si è rivelato non essere il caso, poiché credo che abbia a che fare con gli interni di come viene salvato il file Image, e aspetterei tutto il giorno / notte solo per la sincronizzazione della mia VM.
NOTE:
maggiore è lo spazio su disco allocato alla VM, maggiore sarà l'immagine, tenere presente questo aspetto quando si distribuisce l'immagine ai propri sviluppatori. Il caricamento frontale dei file di progetto per progetto potrebbe essere eccessivo e lo lascerei a ogni sviluppatore per impostare dopo aver creato l'immagine.
Ashley Schroder ha un vecchio articolo correlato che è una buona lettura, così come alcuni dei commenti di Fooman e Colin
Speriamo che questo aiuti a comprendere il problema elencato, numero 6.