我的database.yml看起来像:
adapter: mysql
database: my_db
username: user1
password: '123'
host: localhost
这是一个非rails应用程序,只是使用rake / ruby来编写脚本。
我可以在此yaml文件中设置默认(dev)和生产,还是特定于rails?
如果是,则运行类似:
rake user:create
如果是生产,我如何传入,因此在yaml文件中使用生产数据库设置?
答案 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