Blankman
Blankman

Reputation: 267120

Using Rake, that loads my db from a YAML file, can i set environments?

My database.yml looks like:

adapter: mysql
database: my_db
username: user1
password: '123'
host: localhost

This is a non-rails application, just using rake/ruby for some scripting.

Can I set a default (dev) and production in this yaml file, or is that rails specific?

If yes, when running something like:

rake user:create

How do I pass in if it is production and therefore use the production db settings in the yaml file?

Upvotes: 2

Views: 1805

Answers (1)

Ben Taitelbaum
Ben Taitelbaum

Reputation: 7403

Where you read the yaml file into memory and parse it is a good place to put the logic to use the current environment (or a default if none is set). A simple way to do this is to rely on an environment variable (don't use RAILS_ENV if it's not a rails app, or RACK_ENV if it's not a rack app).

Use something like:

my_env = ENV['MY_ENV_VARIABLE'] || 'development'
db_settings = YAML::load(File.open(yml_file))[my_env]

Then you can call rake via:

MY_ENV_VARIABLE=production rake my_task

Or if you want to add a param to the task itself, you can set it up to use

rake my_task[production]

(but that can get messy depending on if you have to quote the whole thing, like in zsh).

Another approach that some libraries use (like heroku_san) is to have a separate task that sets the environment variable, and rely on calling multiple tasks, so you'd have a task :production that sets the environment variable and can then call

rake production my_task

Upvotes: 3

Related Questions