Ruby on rails “放置在何处”;“之前”;及;“之后”;在卡皮斯特拉诺食谱中?

Ruby on rails “放置在何处”;“之前”;及;“之后”;在卡皮斯特拉诺食谱中?,ruby-on-rails,ruby-on-rails-3,capistrano,Ruby On Rails,Ruby On Rails 3,Capistrano,愚蠢的问题,但我们有一个坏的Capistrano配方,我想验证一下,我们没有错误地使用之后和之前的 这些前后任务属于:deploy命名空间块还是在其外部?我看到了这两个例子 这是有问题的deploy.rb的摘录: namespace :deploy do task :start do ; end task :stop do ; end task :restart, :roles => :app, :except => { :no_release => true }

愚蠢的问题,但我们有一个坏的Capistrano配方,我想验证一下,我们没有错误地使用
之后和
之前的

这些前后任务属于
:deploy
命名空间块还是在其外部?我看到了这两个例子

这是有问题的deploy.rb的摘录:

namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end

  # copy database.yml into project
  task :copy_database_config do
    production_db_config = "/Library/RoRconfig/#{application}.yml"
    run "cp #{production_db_config} #{current_release}/config/database.yml"
    `puts "replaced database.yml with live copy"` 
  end

  task :pipeline_precompile do
    run "cd #{release_path}; RAILS_ENV=production rake assets:precompile"
  end

  after "deploy:update_code", "deploy:pipeline_precompile"         ### <---
  before "deploy:finalize_update", "deploy:copy_database_config"   ### <---
end
namespace:deploydo
任务:开始做;结束
任务:停止做;结束
任务:重新启动,:角色=>:app,:except=>{:no\u release=>true}do
运行“#{try#sudo}touch#{File.join(当前路径,'tmp','restart.txt')”
结束
#将database.yml复制到项目中
任务:复制\u数据库\u配置do
production_db_config=“/Library/RoRconfig/#{application}.yml”
运行“cp{production\u db\u config}{current\u release}/config/database.yml”
`将“用实时副本替换了database.yml”`
结束
任务:管道\u预编译do
运行“cd#{release_path};RAILS_ENV=production-rake-assets:precompile”
结束

在“deploy:update_code”、“deploy:pipeline_precompile”####之后,我使用类似于以下内容的设置:

after :deploy, "deploy:update_code", "deploy:pipeline_precompile"
before :deploy, "deploy:finalize_update", "deploy:copy_database_config"

namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end

  # copy database.yml into project
  task :copy_database_config do
    production_db_config = "/Library/RoRconfig/#{application}.yml"
    run "cp #{production_db_config} #{current_release}/config/database.yml"
    `puts "replaced database.yml with live copy"` 
  end

  task :pipeline_precompile do
    run "cd #{release_path}; RAILS_ENV=production rake assets:precompile"
  end
end

根据capistrano的doc at,以下是他们对内部和外部的建议:部署命名空间:

# call an existing task
before :starting, :ensure_user
after :finishing, :notify

# or define in block
namespace :deploy do
  before :starting, :ensure_user do
    #
  end

  after :finishing, :notify do
    #
  end
end
但是,请注意不要将这些挂钩放在您导入的自定义capistrano rake文件中,因为加载顺序可能会使其不存在