我正在尝试使用Amazon Opsworks与Postgres一起使用基本的rails应用程序。 Opsworks目前缺乏对Postgres的内置支持,但我正在使用一些我发现似乎写得很好的烹饪书。我已将它们全部分配到我的自定义食谱:https://github.com/tibbon/custom-opsworks-cookbooks
无论如何,我现在陷入困境的是将master postgres数据库的ip地址输入到database.yml文件中。它似乎应该指定多个后端,有点像我的haproxy服务器将所有rails服务器视为'后端'。
有没有人得到这个工作?
答案 0 :(得分:4)
我必须在我的Rails层添加一些自定义JSON。
看起来像这样:
{
"deploy": {
"my-app-name": {
"database": {
"adapter":"mysql2",
"host":"xxx.xx.xxx.xx"
}
}
}
}
答案 1 :(得分:1)
我认为你必须定义一个自定义配方来更新database.yml并重新启动app服务器。
在this guide中,使用redis服务器完成同样的事情:
node[:deploy].each do |application, deploy|
if deploy[:application_type] != 'rails'
Chef::Log.debug("Skipping redis::configure as application #{application} as it is not an Rails app")
next
end
execute "restart Rails app #{application}" do
cwd deploy[:current_path]
command "touch tmp/restart.txt"
action :nothing
only_if do
File.exists?(deploy[:current_path])
end
end
redis_server = node[:opsworks][:layers][:redis][:instances].keys.first rescue nil
template "#{deploy[:deploy_to]}/current/config/redis.yml" do
source "redis.yml.erb"
mode "0660"
group deploy[:group]
owner deploy[:user]
variables(:host => (node[:opsworks][:layers][:redis][:instances][redis_server][:private_dns_name] rescue nil))
notifies :run, resources(:execute => "restart Rails app #{application}")
only_if do
File.directory?("#{deploy[:deploy_to]}/current")
end
end
end
我还没有为自己测试过这个,但我相信我会很快,我会尽快更新这个答案。