AWS OpsWorks Chef 11禁用database.yml软链接及多数据库配置问题
问题解决方案
禁用OpsWorks自动软链接database.yml的方法
要停止OpsWorks自动生成database.yml并执行软链接的操作,直接使用GitHub仓库自带的配置文件,可在栈的自定义JSON中添加如下配置,关闭默认的database.yml管理逻辑:
{ "opsworks": { "rails": { "manage_database_yml": false } } }
配置更新后重新部署应用即可生效,OpsWorks将不再覆盖你代码仓库中的config/database.yml文件。
主从双数据库配置方案
你之前使用的嵌套式配置无法生效,是因为OpsWorks默认的Rails层部署配方仅支持扁平化的单数据库结构,无法直接识别primary/secondary的嵌套字段,推荐两种可行配置方案:
方案1(优先选择):配合禁用自动管理实现
使用上述方法关闭manage_database_yml后,直接在代码仓库的database.yml中编写主从配置即可,以Rails 6+的多数据库配置为例:
production: primary: host: "主库地址" database: "库名" username: "用户名" password: "密码" adapter: "postgresql" port: 5432 pool: 100 encoding: "utf8" secondary: host: "从库地址" database: "库名" username: "用户名" password: "密码" replica: true adapter: "postgresql" port: 5432 pool: 100 encoding: "utf8"
该方案无需修改OpsWorks默认逻辑,灵活度最高。
方案2:保留自动管理能力的配置方法
如果你需要将数据库配置保存在OpsWorks自定义JSON中不提交到代码仓库,可自定义Chef配方覆盖默认的database.yml生成模板,调整模板逻辑支持读取primary/secondary嵌套字段,你之前编写的嵌套结构JSON可以直接作为自定义配置使用,只需在自定义模板中对应遍历配置节点即可。
内容的提问来源于stack exchange,提问作者ipegasus
相关产品推荐
相关产品推荐

