使用Capistrano进行部署 - 仅针对匹配的服务器运行

时间:2011-04-05 17:05:05

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

我试图使用Capistrano部署我的应用程序,但是我收到此错误消息:

  

`deploy:setup'仅针对匹配{:except => {:no_release => true}}的服务器运行,但没有匹配的服务器

运行此命令时:

bundle exec cap deploy:setup

这是我的deploy.rb文件。

set :application, "example.com"
set :repository, "git@github.com:username/repo.git"
set :use_sudo, false
set :scm, :git
set :web, application
set :app, application
set :db, application
set :branch, "master"
set :user, "webmaster"
set :deploy_to,  "/opt/www/#{application}"
set :deploy_via, :remote_cache
set :domain, application
set :port, 2222

set :bundler_cmd, "bundle install --deployment --without=development,test"
ssh_options[:paranoid] = false

namespace :deploy do
  task :start do ; end
  task :stop do ; end

  task :restart_stalker do
    run "cd #{deploy_to}/current && thor stalker:kill && stalker:init"
  end

  task :restart, :roles => :app, :except => { :no_release => true } do
    run "cd #{deploy_to}/current && touch tmp/restart.txt"
  end

  after "bundler_cmd", "deploy:restart_stalker"
end

我正在使用Rails 3。

4 个答案:

答案 0 :(得分:9)

您需要定义一些角色。 E.g:

role :app, 'myapphostname'
role :web, 'mywebhostname'

您似乎使用了“set”而不是“role”,但在进行更改之前,您应该确认这一点。

答案 1 :(得分:3)

大多数人可能正在使用capistrano的多级,所以你不会把你的角色放在deploy.rb中,所以如果你在config / deploy /#env_name.rb中添加了特定于环境的角色,那么一定要在你的config /中添加这些角色deploy.rb

set :stages, %w(#env_name1, #env_name2...)
require 'capistrano/ext/multistage'

并确保安装了capistrano-ext gem。

答案 2 :(得分:1)

似乎您已使用bundle exec cap deploy:setup设置了服务器。

如果是这种情况,您现在应该运行bundle exec cap deploy

答案 3 :(得分:0)

我将在这里留下一个答案帮助我,当这里或其他地方没有任何建议的答案可以帮助我时 - 我花了几天时间研究这个问题,然后才发现修复。

如果使用多阶段,请确保环境特定的配置文件(例如config/deploy/environment.rb)是config/deploy目录中的文件。我有一个我无法部署的环境,dev,原来是一个完整的空config/deploy/dev文件被加载而不是我的config/deploy/dev.rb文件,导致每个部署到该环境因发布错误而失败。