Een belangrijke variabele omdat deze bepaalt of de development, production of test environment word opgestart. En default is dat development. Dus als ik in mijn artikelen heb gesproken over rake db:migrate, script/console en script/server dan is dat allemaal in de development omgeving. Maar diezelfde commando's werken uiteraard ook in production of de test environment maar dat moet ik even aangeven op de command-line.
Het is echter van belang hoe je de RAILS_ENV variabele gebruikt.
We gaan eerst een demo app maken waarbij we uitgaan van rails 2.
> rails rails_env
> cd rails_env
> script/generate model Gebruiker
We hebben het model alleen nodig voor een migration.
> rake db:migrate
== 1 CreateGebruikers: migrating ==
-- create_table(:gebruikers)
-> 0.0029s
== 1 CreateGebruikers: migrated (0.0031s) ==
We hebben niets aan onze migration veranderd maar omdat deze default t.timestamps bevat zien we toch wat gebeuren.
Rake gaat heel flexibel om met de syntax van RAILS_ENV
In tegenstelling tot script/console.
De volgende voorbeelden werken allemaal in rake.
> rake RAILS_ENV=production db:migrate
> rake db:migrate RAILS_ENV=production
> RAILS_ENV=production rake db:migrate
Dus kies er maar één en voer het uit.
> rake RAILS_ENV=production db:migrate
== 1 CreateGebruikers: migrating ==
-- create_table(:gebruikers)
-> 0.0029s
== 1 CreateGebruikers: migrated (0.0031s) ==
En inderdaad, in mijn db directory heb ik nu een bestand production.sqlite3
script/console
script/console is ideaal als je ad hoc iets moet doen op je production server. Meestal eindigen die sessies in een rake task en als ze erg belangrijk zijn in een Capistrano task in deploy.rb. En als het dus nodig is in production dan is het handig om de syntax te weten. In script/console is dit namelijk de enige manier om het aan de praat te krijgen.
> RAILS_ENV=production script/console
En verder kunnen we RAILS_ENV natuurlijk prima gebruiken om ons eigen custom environment op te starten. Voeg het volgende toe aan je database.yml:
demo:
adapter: sqlite3
database: db/demo_klanten.sqlite3
We hebben nu een demo environment opgezet voor bijvoorbeeld klanten. Uiteraard niet vergeten om in config/environments het bestand demo.rb aan te maken met bijv. de inhoud van production. Dan een migration.
> rake RAILS_ENV=demo db:migrate
Als je vervolgens die omgeving ook op wilt starten dan niet vergeten omdat ook daar mee te geven.
> ./script/server RAILS_ENV=demo
Starting...