使用Rake,从YAML文件加载我的数据库,我可以设置环境吗?

时间:2012-04-20 21:24:45

标签: ruby rake

我的database.yml看起来像:

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

这是一个非rails应用程序,只是使用rake / ruby​​来编写脚本。

我可以在此yaml文件中设置默认(dev)和生产,还是特定于rails?

如果是,则运行类似:

rake user:create

如果是生产,我如何传入,因此在yaml文件中使用生产数据库设置?

1 个答案:

答案 0 :(得分:3)

在那里你将yaml文件读入内存并解析它是一个放置逻辑以使用当前环境的好地方(如果没有设置,则是默认值)。一种简单的方法是依赖环境变量(如果它不是rails应用程序,请不要使用RAILS_ENV,如果它不是机架应用程序则不要使用RACK_ENV)。

使用类似:

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

然后你可以通过以下方式拨打rake:

MY_ENV_VARIABLE=production rake my_task

或者,如果您想为任务本身添加一个参数,可以将其设置为使用

rake my_task[production]

(但这可能会变得混乱,具体取决于你是否必须引用整个事情,比如在zsh中)。

某些库使用的另一种方法(如heroku_san)是有一个单独的任务来设置环境变量,并依赖于调用多个任务,因此你有一个任务:production来设置环境变量和然后可以打电话

rake production my_task