0

我在 ( migrate.rb) 下面有一个配方,它作为我们部署的一部分运行并且运行良好。

然而,我无法锻炼的一件事是如何设置它,以便它也可以作为execute_recipe命令中的独立配方运行。

就目前而言,如果我们单独执行这个配方,那么什么也不会发生,因为node[:deploy].each没有任何东西可以循环(部署密钥不存在)..

唯一真正依赖部署节点的部分是这一行cwd "#{deploy[:deploy_to]}/current",因为我需要知道代码部署到哪里。

node[:deploy].each do |application, deploy|

  execute 'DB migrate then seed' do
    cwd "#{deploy[:deploy_to]}/current"
    command 'php artisan migrate; while read -r line || [ -n "$line" ]; do php artisan db:seed --class="$line"; done < "app/database/run.list"'
  end

end
4

1 回答 1

2

我会将那部分重新定位到定义(或提供者)。所以基本上把你的食谱分成两部分:

食谱/deploy.rb:

node[:deploy].each do |application, deploy|
  php_artisan_setup do
    dir "#{deploy[:deploy_to]}/current"
  end
end

定义/php_artisan_setup.rb:

define :php_artisan_setup do
  execute 'DB migrate then seed' do
    cwd params[:dir]
    command 'php artisan migrate; while read -r line || [ -n "$line" ]; do php artisan db:seed --class="$line"; done < "app/database/run.list"'
  end
end

这样,您也可以php_artisan_setup从“独立”配方中调用。您仍然需要两个食谱,但您不必复制相关部分。

于 2014-04-25T17:22:15.550 回答