为什么Capistrano部署为bundle exec rake db:migrate提供不匹配的主机?

时间:2014-03-19 13:40:41

标签: ruby-on-rails ruby ruby-on-rails-4 capistrano

我正在使用capistrano进行部署,我正在努力;在我尝试部署网站时,找出为什么它不会运行迁移。

这是整个错误:

 WARN [SKIPPING] No Matching Host for /usr/bin/env if test ! -d /home/deploy/forge_staging/releases/20140319132005; then echo "Directory does not exist '/home/deploy/forge_staging/releases/20140319132005'" 1>&2; false; fi
 WARN [SKIPPING] No Matching Host for bundle exec rake db:migrate

继承我的设置:

deploy.rb

lock '3.1.0'
server "xxx.xxx.xxx.xxx"

set :application, "ForgeAndCo"
set :scm, "git"
set :repo_url, "my-repo"
# set :scm_passphrase, ""

set :user, "deploy"
set :use_sudo, false

set :ssh_options, {
  forward_agent: true,
  port: 14439
}

# files we want symlinking to specific entries in shared.
set :linked_files, %w{config/database.yml}

# dirs we want symlinking to shared
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

SSHKit.config.command_map[:rake]  = "bundle exec rake" #8
SSHKit.config.command_map[:rails] = "bundle exec rails"

set :branch, ENV["REVISION"] || ENV["BRANCH_NAME"] || "master"


set :keep_releases, 20

namespace :deploy do
  desc 'Restart passenger without service interruption (keep requests in a queue while restarting)'
  task :restart do
    on roles(:app) do
      execute :touch, release_path.join('tmp/restart.txt')

      unless execute :curl, '-s -k --location localhost | grep "Forge" > /dev/null'
        exit 1
      end
    end
  end
  after :finishing, "deploy:cleanup"
end
# start new deploy.rb stuff for the beanstalk repo

staging.rb

role :app, %w{deploy@xxx.xxx.xxx.xxx}
role :web, %w{deploy@xxx.xxx.xxx.xxx}
role :db,  %w{deploy@xxx.xxx.xxx.xxx}

# Extended Server Syntax
# ======================
# This can be used to drop a more detailed server
# definition into the server list. The second argument
# something that quacks like a hash can be used to set
# extended properties on the server.
# server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value

set :stage, :staging

server "xxx.xxx.xxx.xxx", user: "deploy", roles: %w{web app db}
set :deploy_to, "/home/deploy/forge_staging"

set :rails_env, 'staging'                  # If the environment differs from the stage name
set :migration_role, 'migrator'            # Defaults to 'db'

set :branch, ENV["REVISION"] || ENV["BRANCH_NAME"] || "master"

这是角色的问题吗?

1 个答案:

答案 0 :(得分:1)

从deploy.rb中删除:(添加capistrano-bundler并在Capfile中要求它)

server "xxx.xxx.xxx.xxx"
SSHKit.config.command_map[:rake]  = "bundle exec rake"
SSHKit.config.command_map[:rails] = "bundle exec rails"
set :user, "deploy"   # you have it in staging.rb
set :use_sudo, false  # not used in cap3

从staging.rb中删除:

role :app, %w{deploy@xxx.xxx.xxx.xxx}
role :web, %w{deploy@xxx.xxx.xxx.xxx}
role :db,  %w{deploy@xxx.xxx.xxx.xxx}
set :migration_role, 'migrator'            # <= this is why you got the error

PS:编辑你的问题并用xxx替换ip。