2

我的 database.yml 看起来像:

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

这是一个非 Rails 应用程序,只是使用 rake/ruby 进行一些脚本编写。

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

如果是,则在运行类似以下内容时:

耙用户:创建

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

4

1 回答 1

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
于 2012-04-20T21:31:22.810 回答