配方在部署和独立运行

时间:2014-04-24 06:46:22

标签: amazon-web-services chef chef-recipe aws-opsworks

我有一个下面的配方(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

1 个答案:

答案 0 :(得分: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

通过这种方式,您可以从#34;独立&#34;中拨打php_artisan_setup食谱也是。你仍然需要两个食谱,但你不必复制相关的部分。