我的 database.yml 看起来像:
adapter: mysql
database: my_db
username: user1
password: '123'
host: localhost
这是一个非 Rails 应用程序,只是使用 rake/ruby 进行一些脚本编写。
我可以在这个 yaml 文件中设置默认(开发)和生产,还是特定于 rails?
如果是,则在运行类似以下内容时:
耙用户:创建
如果它是生产环境,我如何传入并因此使用 yaml 文件中的生产数据库设置?
您将 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