Ο αγαπημένος μας developer κάνει την σούπερ ουάου εφαρμογή μετά κόπου, καφεΐνης , νικοτίνης και ιδρώτα αλλά είναι δύσκολο να πρέπει να αλλάζεις κάθε 3 και λίγο τα <beep> configurations για την Database και όχι μόνο. Ειδικά αν είναι και scallable εφαρμογή και τρέχει πίσω από load balancer με ένα αξιοσημείωτο αριθμό servers μάλλον καταλαβαίνεις το πλούσιο λεξιλόγιο που έχει η Ελληνική μας γλώσσα δια τα λεγόμενα του developer.
Βάλε και την κρίση άστα να πάνε βλέπουμε μάλλον τον developer κατά δαφνί μεριά.
Γι αυτό φίλτατε συνάδελφε σου έχω την λύση:
Μπορείς στο virtualhost ή στο .htaccess του server να ορίζεις enviromental variables που θα αντιστοιχούν μόνο και μόνο στην εφαρμογή σου.
Για να γίνει αυτό πρώτα δίνουμε την εντολή:
- Κώδικας: Επιλογή όλων
sudo a2enmod env
Ειδάλλως αν είμαστε σε shared hosting ελέγχουμε αν το mod_env είναι ενεργοποιημένο.
Τα enviromental Variables τώρα στο apache ορίζονται ως:
- Κώδικας: Επιλογή όλων
SetEnv ^όνομα^ ^τιμή^
πχ.
- Κώδικας: Επιλογή όλων
SetEnv DIMOPSIFISMA 2015
Για να λειτουργήσει πρέπει ΠΡΙΝ από αυτό να έχουμε βάλει την ρύθμιση (Είτε στο VirtualHost είτε στο .htaccess):
- Κώδικας: Επιλογή όλων
AllowOveride all
Έτσι το μόνο που έχετε να κάνετε είναι να ορίσετε μια φορά τα enviromental variables στους υπολογιστές όπου τρέχει η εφαρμογή σας και μετά να μην ξαναασχοληθείτε να αλλάζεται τα configurations.
Για καλύτερη εμπέδωση θα ακολουθήσουμε ένα σενάριο που καλύπτει 2 συχνές περιπτώσεις:
- Χρήση σε VirualHost.
- Development Χρήση.
Για το παράδειγμα μας υποθέτουμε ότι υπάρχουν 2 μηχανήματα:
- Ένα VPS με apache σε ubuntu.
- Ένα Ubuntu development μηχάνημα.
Ο VPS είναι ένα μηχάνημα που τρέχει το web app μας σε virtualhost. Και το Developent μηχάνημα ένα μηχάνημα που έχει ένα κατάλογο που έχει διάφορα projects και θέλουμε κάθε ένα από αυτά να έχει διαφορετικά Enviromental variables.
Έχουμε ένα απλό κομμάτι κώδικα που εμφανίζει την enviromental variable hello:
- Κώδικας: Επιλογή όλων
<?php var_dump(getenv("hello")); ?>
Και θέλουμε σε κάθε διαφορετικό server να δείχνει διαφορετική τιμή του hello.
Ουσιαστικά οι γραμμές ρύθμισης που θα ορίζουν το enviromental variable είναι:
- Κώδικας: Επιλογή όλων
AllowOveride all
Setenv hello ^μια_τιμή_όποια_και_να_ναι^
Στον Server το βάζουμε εντός του Virtualhost που είναι ένα αρχείο στο /etc/apache2/sites-available και μπαίνει μεταξύ του
- Κώδικας: Επιλογή όλων
<VistualHost>
</Virtualhost>
Στο Development περιβάλλον έχουμε τις επιλογές:
- Αυτές οι γραμμές να μπούν στο .htaccess
- Ο Χρήστης να έχει ένα virtual host για το localhost και να σερβίρει έναν φάκελο με όλα τα project που κάνει development.
- Να χρησιμοποιεί το default vhost και να παίζει στο /var/www/html .
Για το πρώτο δεν νομίζω να χρειάζεται και παραπάνω πληροφορίες.
Για το δεύτερο απλά στο virtualhost που έχει ορίσει βάζει τις γραμμές στο:
- Κώδικας: Επιλογή όλων
<Directory ^πλήρες path του φακέλου που αντιστοιχεί στο project^>
</Directory>
Όπου ^πλήρες path του φακέλου που αντιστοιχεί στο project^ είναι το path του φακέλου που έχει την μια γραμμή κώδικα. Πχ. αν το path του αρχείου είναι το /home/mitsos/htdocs/index.php τότε το ^πλήρες path του φακέλου που αντιστοιχεί στο project^ έχει την τιμή /home/mitsos/htdocs/ .
Στην τρίτη περίπτωση απλά είτε στο /etc/apache2/apache2.conf είτε στο /etc/apache2/sites-available/000-default.conf βάζουμε τις παραπάνω γραμμές. Ειδικά στο /etc/apache2/sites-available/000-default.conf το βάζουμε όπως βάζουμε τα enviromental variables σε virtualhost.
Bonus Round:
Spoiler: show