capify-ec2 cap deploy:迁移db没有匹配的服务器

时间:2014-10-14 11:35:06

标签: ruby-on-rails amazon-web-services deployment amazon-ec2 capistrano

我无法执行cap deploy:migrate。错误信息是:

2014-10-14 10:01:15 executing `deploy:migrate'
executing "ls -x /home/pj-production/projectname/releases"
`deploy:migrate' is only run for servers matching {:roles=>:db, :only=>{:primary=>true}}, but no servers matched

设置:

rails(3.2.13)

capistrano(2.14.2)

capify-ec2(1.1.6)

cap ec2:status

Project: PROJECTNAME.
Num Name     ID   Type     DNS                                    Zone       Roles
00: worker01 i-1 t1.micro  ec2-x1.eu-west-1.compute.amazonaws.com eu-west-1b worker
01: db01     i-d m1.medium ec2-x2.eu-west-1.compute.amazonaws.com eu-west-1b
02: web01    i-f m1.medium ec2-x3.eu-west-1.compute.amazonaws.com eu-west-1b web,app,db
在deploy.rb中

ec2_roles name: :web, options: { default: true }
ec2_roles name: :app, options: { default: true }
ec2_roles name: :db, options: { default: true }
ec2_roles name: :worker, options: { default: true }

deploy.rb中有部分

task :start, roles: :app do
  run "cd #{current_path} && bundle exec unicorn -c config/unicorn/production.conf.rb -E production -D"
end

有效,例如当我执行:cap deploy时,它会运行并完成。

可能是什么问题? 我用谷歌和其他问题进行了搜索。但无法让它运行。 我没有使用多级btw和deploy.rb的gist文件:https://gist.github.com/ADogan/2121d312c5938746acd6

1 个答案:

答案 0 :(得分:1)

对于具有角色的ec2实例:'web,app,db',您需要在AWS中添加一个带有单个值'primary'的'Options'标记。这相当于使用行:

的config / deploy / env.rb
role :db, "10.1.2.3", :primary => true

部署有效,因为如果没有匹配“db”角色的框,则它将跳过db:migrate,其中primary为true。您特别要求db:migrate,如果没有框来运行它将失败。